对于某些操作系统(OpenBSD 和...),线程是用户级的,并且主要是为了兼容性而存在的。不考虑这种类型的实现,内核级线程的使用与多进程设计相比如何?每种方法的安全含义是什么?表现如何?开发的复杂性?
问问题
1425 次
1 回答
0
默认情况下,线程共享所有内容。默认情况下,进程不共享任何内容。因此,唯一的区别在于分享的数量。意识到这一点,Plan 9 和 Linux 提供了一个单一的系统调用(rfork()
对于 Plan 9,clone()
对于 Linux),它可以创建一个新进程、一个新线程或介于两者之间的东西。
部分平台不支持fork()
(如:Win32、Java);这使得创建一个新进程非常昂贵,这导致人们普遍认为线程有助于提高性能。
线程比进程更容易创建,但 POSIX API 允许非常有效地创建进程。尽管如此,一些系统在创建新流程方面仍然很慢。
在单 CPU 计算机上,同一进程的线程之间的上下文切换可能比不同进程之间的更快(例如:不需要刷新 TLB)。您需要进行大量的上下文切换才能对性能产生重大影响。OTOH,在 SMP 机器上,在不同内核中运行的线程之间共享数据可能意味着某些数据需要在缓存之间移动(缓存线弹跳)。预测多线程程序的性能可能很困难。
安全方面,由于线程共享一切,这意味着线程之间没有任何保护,所以从某种意义上说,这就像回到虚拟内存操作系统之前的日子。
至于复杂性,正确编写多线程程序比正确编写非多线程程序更难(有人说要困难一个数量级)。更糟糕的是,对于初学者来说,编写多线程程序显然比编写事件驱动程序更简单。
于 2011-11-26T14:59:04.220 回答