现代操作系统学习笔记--3--线程

一、什么是线程

    

开个QQ,开了一个进程;开了迅雷,开了一个进程。
在QQ的这个进程里,传输文字开一个线程、传输语音开了一个线程、弹出对话框又开了一个线程。

所以运行某个软件,相当于开了一个进程。在这个软件运行的过程里(在这个进程里),多个工作支撑的完成QQ的运行,那么这“多个工作”分别有一个线程。

所以一个进程管着多个线程。

通俗的讲:“进程是爹妈,管着众多的线程儿子”
    --------从知乎上看到的一句话说的比较通俗

二、进程跟线程的区别

   进程最经典的定义就是一个执行中的程序的实例。系统中的每个进程都运行在某个进程的上下文中。上下文是由程序正确运行的所需的状态组成的。这个状态包括放在内存中的程序代码和数据,栈,通用目的寄存器的内容,程序计数器,环境变量以及打开文件描述符。

进程的地址空间如下图所示,注意的是这是每个进程都有的独立、私有的空间(代码段总是从0x400000开始的),这是通过虚拟内存技术实现的。 
这里写图片描述

其中.data是已初始化的全局和静态变量 
.bss是未初始化的全局和静态变量(不占空间,只是一个占位符) 
.text是已经编译的程序机器代码

线程是运行在进程上下文的逻辑流。一个进程里边可以运行着多个线程,所以线程的粒度比进程小,线程由内核调度,也有自己的线程上下文,包括一个唯一的整数线程ID, 栈和栈指针,程序计数器,通用目的寄存器和条件码。要注意的是,所有运行在一个进程里的线程共享该进程的整个虚拟地址空间。(结合上图)


三、线程间的通信

1、管道-----类似于linux 的命令,比如 cat dff,.txt | grep dff

2、记名管道-----

3、套接字---类似于虫洞

    socket ---套接字---进程间的通信机制。支持不同层面,不同应用,跨网络的通信。

使用套接字,双方必须先创建一个套接字,其中一方作为服务器,一方作为客户方;一方保持监听状态,等待远方发送连接过来,服务器在收到连接请求后,会创建一个客户套接字,与远处的客户套接字形成点对点的通信。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值