(多)线程存在的意义
1.某些活动随着时间的推移会被阻塞,将应用程序分解成可准并行运行的多个顺序线程,程序设计模型会简单些。
2.线程比进程更轻量级,创建,销毁都方便。
3.多个线程允许计算和I/O处理类活动彼此重叠进行,从而加快应用程序执行速度。
4.为真正并行提供实现可能。
在用户空间实现线程
优
1.整个线程包放在用户空间,内核对此一无所知。所以它可以在不支持线程的操作系统上实现。
2.用户空间管理线程时,每个进程需要其专有的线程表,用来跟踪该进程中线程,与内核的进程表类似。不过他仅仅记录各个线程的属性,如线程的程序计数器,堆栈指针,寄存器和状态等。也就是说当一个线程的状态切换时,只需程序计数器,堆栈指针,寄存器的相应信息改变就可以,也即其线程切换速度极快。
3.允许进程有自己的调度算法,拓展性强(这是相比于内核空间内核线程需要一定固定表格和堆栈空间)。
缺
4.一个线程开始运行,除非该线程自动放弃CPU,否则该进程其他线程就不能运行(此时的单独进程无法进行轮转调度,也没有时钟中断)。
5.阻塞系统的调用问题,一个线程阻塞时,整个进程将阻塞。
在内核中实现线程
此时每个进程没有自己的线程表,而是内核中有该线程表,此时线程的切换等需要系统调用.
优
1.一个线程阻塞时,内核可以调用进程其他线程。
2.当有多个处理机时,一个进程的多个线程可以同时执行
缺
3.线程创建,销毁开销大(需要内核的调度)
参考《现代操作系统》