线程、进程、程序

线程,有时候被称为轻量级进程,是程序执行流的最小单位。一个标准的线程由线程ID、当前指令指针、寄存器集合与堆栈组成。通常意义上,一个程序有一个或多个线程组成,各个线程之间共享程序的内存代码(代码段、数据段、堆栈等)以及一些进程级的资源(如打开文件和信号)。

使用多线程由如下原因:

一、某个操作可能会陷入长时间等待,等待的线程会进入睡眠状态,无法继续执行。多线程执行可以有效的利用等待的时间。典型的例子就是等待网络响应。

二、某个操作会消耗大量的时间,如果只有一个线程,程序和用户之间的交互会中断。多个线程可以让一个负责交互,另外一个线程负责计算。

三、程序逻辑本身就要求并发操作,例如一个多端下载软件。

四、多cpu或多核计算机,本身具备同时执行多个线程的能力。

五、相对于多进程应用,多线程在数据共享方面的效率要高。

线程安全

       多线程程序处于一个多变的环境当中,可以访问的全局变量和堆栈数据随时可能被其他的线程改变。

一、竞争与原子操作

二、同步与锁

为了避免多个线程同时读写一个数据而产生不可预料的后果,我们需要将各个线程对同一个数据的访问同步。所谓同步,是指在一个线程访问数据未结束的时候,其他线程不得对同一个数据进行访问。

同步最常见的方法是使用锁。锁是一种非强制性,每一个线程在访问数据或者资源之前首先试图获取锁,并在访问结束之前释放锁。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值