大家做linux C/C++网络编程时,啥时用到多线程或者多进程啊?

我怎么感觉一般单进程单线程就能应付了 大家多线程难道是有的线程 /进程去处理 GUI ,数据库啥的了?

阅读 8.1k
7 个回答

多个进程或者线程无非就是要多占用点CPU的时间片,让程序运行效率更高点。不过进程间通信,线程上下文切换,同步等问题同样会对性能有些影响。服务器程序为了提高CPU的利用率,采用多进程或多线程的模型是比较常见的做法,而客户端程序一般来说的确单进程单线程就可以了。另外 @Hacken 的回答我不赞同,并不是说单进程和单线程的模型就无法同时服务多个客户端了,这里面主要要依赖IO复用技术。反过来讲,同时服务1000个客户端,难道要同时开1000个线程?显然不可能。

这个主要根据需求来吧。
如果你做分布式,或者高负载的应用的时候,多线程/多进程就很需要了。

假设你用单线程实现一个文件传输程序.如果一个客户端连接到你下载一个文件,这个文件很大10G要下载10分钟。这个时候其他客户端希望来下载一个100k的图片,怎么办?先等待10分钟?

对于一些流程上没有先后顺序的处理过程,使用多进程线程可以优化流程设计

单线程或者单进程完全可以应对网络开发中多任务或多连接情况,并且效率很高(epoll异步处理方式),不过有些情况我们也应该考虑到:

1、大规模耗时数据处理时,是不是应该把它放到单独的线程或线程池中处理?如果不这样,是不是在用户响应体念上会相当差?

2、多核CPU。只开一个进程,是不是浪费了其它核的处理能力了呢?

3、一些必须完全独立的进程或是线程,比如守护进程。

市面 96%的人写不好多线程异步系统,写出来也是问题多多,所以我一般选择多进程同步模式,为的是不加班,按时交付。特殊情况再讨论特殊的要求

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题