Process 什么是操作系统更容易设置的,新进程还是新线程?

Process 什么是操作系统更容易设置的,新进程还是新线程?,process,operating-system,pthreads,Process,Operating System,Pthreads,如上所述的问题。。从操作系统的角度来看,线程还是进程更容易创建?传统上,线程被称为“轻量级进程”,所以我想它们更容易设置 Linux中的IIRC分叉和启动新线程(clone(2))都是通过调用相同的函数(do_fork)来实现的,并且设置时间对于合适的数字来说是相当的。对于大量的分叉/克隆(想想数千个),它们开始累积起来 在TLPI中有一个很好的比较: 分叉100000次:22.27秒 克隆100000次:2.97秒 尤其是clone的一个非常好的特性是,即使克隆的进程的大小增加,速度也保持

如上所述的问题。。从操作系统的角度来看,线程还是进程更容易创建?

传统上,线程被称为“轻量级进程”,所以我想它们更容易设置

Linux中的IIRC分叉和启动新线程(
clone(2)
)都是通过调用相同的函数(
do_fork
)来实现的,并且设置时间对于合适的数字来说是相当的。对于大量的分叉/克隆(想想数千个),它们开始累积起来

在TLPI中有一个很好的比较:

  • 分叉100000次:22.27秒
  • 克隆100000次:2.97秒
尤其是
clone
的一个非常好的特性是,即使克隆的进程的大小增加,速度也保持不变


线程的真正优势在于它们不需要IPC。

创建新线程更容易,因为创建新进程时,它需要比线程更多的设置,例如安全上下文、可继承句柄、当前目录等。

创建新线程应该比创建新进程更快。

过程是一个沉重的系统结构。它有自己的虚拟内存空间,拥有所有句柄(互斥体、信号量、打开的文件),并具有其他进程的保护。跨进程通信必须通过操作系统进行

线程是进程的“子级”。线程只是一个执行上下文(寄存器、堆栈和线程本地状态),可以在另一个硬件内核上运行,也可以与进程中的其他线程在同一个内核上共同调度。多个线程共享单个进程的资源,包括该进程拥有的地址空间和操作系统句柄

有些结构甚至比动态创建线程更快,可以在程序运行时实现多任务处理。

某些系统或代码库支持线程池(轻量级线程)。在本例中,您告诉系统要运行多少线程,然后系统会提前创建这些线程。然后,您可以从这个池中分配和释放线程,而不是创建和销毁线程(这仍然是一个相对缓慢的过程)

Job Tasking是另一种类似的轻量级多核结构,其中有多个线程,其中包含要执行的任务队列。他们在作业队列中运行任务,然后在队列为空时休眠


对于线程池和作业任务,除了创建和销毁全局池和队列之外,不需要线程启动/关闭成本。

线程和进程之间的主要区别是 1.线程共享该进程的地址空间 创造它;进程有自己的地址

2.线程可以直接访问its的数据段 过程进程有自己的数据段副本 父进程的

3.线程可以直接与的其他线程通信 其过程;进程必须使用进程间通信 与同级进程通信

4.0线程几乎没有开销;过程 相当大的开销。

5.容易创建新线程;新工艺要求 父进程的重复。

6.线程可以对 同样的过程;流程只能对其进行控制 子进程

7.主线程的更改(取消、优先级) 更改等)可能会影响其他线程的行为 过程的细节;对父进程的更改不起作用
影响子进程

创建一个线程必须与创建一个进程一样容易,因为创建一个进程意味着至少创建一个线程来运行进程代码

Rgds,
马丁

只是一个猜测,但可能是线索。要创建进程,操作系统需要在特定于该进程的内存中创建空间。一个进程内可以运行多个线程。在某些操作系统中,可以在进程之间设置共享内存区域,以避免IPC开销,并通过共享内存上下文实现线程式通信。它确实需要一些操作系统支持来完成初始设置——例如,可以直接支持共享内存,也可以通过共享文件(可能位于内存中)上的内存映射文件io来完成。