线程

来源:互联网 发布:java培训mobiletrain 编辑:程序博客网 时间:2024/04/29 16:51

1  线程拥有完全一样的地址空间,由于各个线程都可以访问进程地址空间的每一个内存地址,所以一个线程可以读写甚至完全清除另一个线程的堆栈,线程之间是没有保护的。

一个进程中所有线程共享的内容:地址空间、全局变量、打开文件、子进程、即将发生的警告、信号与信号处理程序、账户信息。

2  每个线程中的内容:程序计数器(记录接着要执行哪一条指令)、寄存器(保存线程当前工作变量)、堆栈(记录执行历史及相应过程的局部变量,每一帧保存一个已经调用但是未返回的过程)、状态。

3 线程也称为轻量级进程。

4 进程是资源分配的单位,线程是调度的最小单位。

5 线程共享一组资源,以便共同完成某个工作。

6 线程可以处于进程的四种状态:运行、阻塞、就绪、终止。线程之间的状态转换和进程一样。

7 每个线程会调用不同的过程,具有不同的执行历史,所以需要各自的堆栈。

8 线程通过库过程thread_create创建新的线程,但所有线程都是平等的;线程完成工作后,调用thread_exit退出,线程消失后不可调度;线程调用thread_wait来等待另一个线程退出,调用线程将阻塞直到所等待的线程退出;线程调用thread_yield自动放弃cpu从而让另一个线程运行。

9 多线程的原因:

多线程共享同一地址空间和所有可用数据,这是多进程不能胜任的;

线程附带资源并不多,线程比进程更容易创建和撤销,许多系统中,线程的创建比进程快100倍,这也是使用多线程的原因;

若多线程是cpu密集型,则无法获得性能的提升,但是如果存在大量的IO处理和计算,多线程允许这些活动重叠进行,提升性能;

多核cpu中多线程可以实现真正的并行。

10 线程如何处理到来的消息:

传统方法是将线程阻塞在一个receive系统调用上,等待消息到来,消息到来时该系统调用接收消息并处理;

另一种方法一个消息到达就导致系统创建一个处理该消息的线程,成为弹出式线程,好处是这种线程无历史,无寄存器、堆栈等,可以快速创建,消息到达和处理开始之间的时间非常短。

0 0
原创粉丝点击