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