至少在linux上,多THREAD程序和多进程程序,对于能不用THREAD的要尽量不用。
拿我说的例子:CLIENT数目有最大数值的(不是越多越好的),连接时间比较长的这一类服务,
用多THREAD几乎没有什么意义。
THREAD的优势是创建开始运行比进程快些(pthread_create比fork), 一旦运行起来,进程的切换和thread的切换差别没有什么。调度也都按进程做的。
THREAD因为共享了内存使得物理内存节省。然而进程本身也有共享的物理页(比如共享库部分)。
还有一开始用多THREAD在那里等着(池)。对于连接数量小并且固定的服务意义不大。
正是因为共享内存,使得多THREAD程序的调试麻烦,运行稳定性不如进程。
所以我建议,能不用THREAD尽量不用。如果必须用,也可以先不用--用进程,等都调试好了后在改THREAD。也不晚。
拿我说的例子:CLIENT数目有最大数值的(不是越多越好的),连接时间比较长的这一类服务,
用多THREAD几乎没有什么意义。
THREAD的优势是创建开始运行比进程快些(pthread_create比fork), 一旦运行起来,进程的切换和thread的切换差别没有什么。调度也都按进程做的。
THREAD因为共享了内存使得物理内存节省。然而进程本身也有共享的物理页(比如共享库部分)。
还有一开始用多THREAD在那里等着(池)。对于连接数量小并且固定的服务意义不大。
正是因为共享内存,使得多THREAD程序的调试麻烦,运行稳定性不如进程。
所以我建议,能不用THREAD尽量不用。如果必须用,也可以先不用--用进程,等都调试好了后在改THREAD。也不晚。
本文探讨了在Linux环境下多线程程序与多进程程序的选择问题,指出对于连接数有限且稳定的场景,多进程相比多线程可能更具优势。文章分析了线程在调试复杂性和运行稳定性方面的不足,并提出了一种开发策略:初期采用多进程实现,后期再考虑转换为多线程。

被折叠的 条评论
为什么被折叠?



