linux中线程的实现以及跟windows系统的比较

来源:互联网 发布:斯蒂芬马布里nba数据 编辑:程序博客网 时间:2024/06/06 08:36

1.在linux内核中(只说内核,即核心级线程的实现),它并不区分进程跟线程的区别,实际上,它都是将它们当做进程来实现的,通是通过fork,然后fork调用clone函数。内核级线程有自己的task_struct,自己的内核栈,相较于普通的进程,它只是没有自己的地址空间,而且它从来不会切换到用户空间去执行。内核级线程也是独立的调度单元。。这是linux内核级线程的实现。。linux核心级线程只能由其它核心线程创建,这意味着linux的用户不可以直接创建核心级线程来并行处理自己的程序。。。

另外再说linux pthread库实现的线程。简单来说,linux pthread创建的线程运行在用户空间,但它是内核支持线程(可以在/proc/pid/task目录下看到),它在内核中是有调度实体的,就是可以作为独立调度单元。它应该是有内核支持的线程,但它绝不是上面所说的内核线程,因为内核线程是操作系统创建的用于执行内核任务的,它是不会切换到用户空间执行的。注意这里的内核支持线程跟用户级线程的区别,用户级线程在内核并没有独立的调度实体。它在多处理机上是无法并行的,而linux pthread创建的线程,是支持多处理机上并行处理的。

2.在windows内核中,它是专门设计了支持内核线程的机制的。它在每个task_struct内,为每个内核级线程提供了tcb控制块,每个tcb用于描述自己的独立的资源,并且支持创建核心级线程来并行执行某一个进程的多个核心级线程。而且windows提供api可以将线程指定在某个处理机上运行。如此便可以达到并行处理。

0 0