为了账号安全,请及时绑定邮箱和手机立即绑定

Linux 下进程和线程的选择问题

Linux 下进程和线程的选择问题

翻阅古今 2018-07-30 21:29:11
因为 Linux 对进程的处理异常高效,而线程则有时候会遇到诸如锁定(locking)之类的相关问题,所以通常在 Linux 下总是会去优先使用进程。但当遇到进程和线程处理能力相当的情况时,比如我要写一个 web 服务器,该如何选择呢?
查看完整描述

2 回答

?
繁星coding

TA贡献1797条经验 获得超4个赞

多进程服务器的一个重要优势是如果某个处理单元遇到问题崩溃了(比如SIGSEV),那也只是一个进程崩溃了而已,其他提供服务的进程还都在。

但是如果是用线程的话,一个线程挂了,所有的在同一个进程内的线程就都跪了。

不过这只是一个参考因素而已,具体是用线程还是进程,还得看你所要做的服务器的具体的模型,才能真正下定论。


查看完整回答
反对 回复 2018-08-03
?
GCT1015

TA贡献1827条经验 获得超4个赞

1、Linux内核其实是用进程来实现线程的,所以在内核某些方面的处理,两者资源和开销可能差不多,但其它平台的实现就不一定了。
2、如果要实现一个web服务器,一个client连接对应一个线程,和一个client连接对应一个进程,两者有很大的不同,一个系统最多的进程数是有限制的,数量也不会太多,而线程真的可以有很多(我没研究过)。当然另一个做法可以是开一个进程来处理多个client连接,但是线程间的同步和数据共享,要比在进程间来得容易,而且进程间的通讯开销还是比较大的(比如socket、共享内存、消息队列等)。线程间如果锁使用不当,比如锁粒度太大,导致性能不理想,但这是设计的问题。
3、用多进程的方法来实现某些需求很合适,比如像google chrome,每一个网页(标签)就用一个进程来处理,所以某个标签崩溃了(网页有flash经常会崩溃:)),不会导致整个浏览器崩溃,这是选择进程的优点。缺点也是显而易见的,开一堆网页后,发现系统有一堆的进程,用户和系统内核都不会喜欢这样的:)另外,一个程序有多个进程并发执行任务,每个进程可以在单独的CPU中运行,这是比较高效的利用了多(核)CPU,因为线程在多个CPU调度的时候,有数据的共享和同步,在处理时可能要等待其它CPU(或有CPU间的数据共享)让出锁,这样就会有开销,所以某种程度讲,选用多进程模型有时是有意利用多CPU(不知这样说得不得当?)
4、由于对系统来说,一个进程的资源是有限制的,比如文件打开的最大数量、能创建的线程的数量、网络连接数量等,所以通常对一个服务器程序来说,在一个机器上运行多个实例(多个进程)也是一个提高机器性能使用率的方法。

所以,不能一概而定,线程和进程各有存在的目的和意义,要根据自己程序的需求来选择。以上我只是把一些相关的东西列出来,具体需要你自己去搜索和证实。


查看完整回答
反对 回复 2018-08-03
  • 2 回答
  • 0 关注
  • 672 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信