当前位置: 首页 > news >正文

做外贸网站注意百度搜索引擎盘搜搜

做外贸网站注意,百度搜索引擎盘搜搜,网络代理软件怎么关闭,广西梧州为什么不能去个人主页 : 个人主页 个人专栏 : 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、线程的概念线程代码的简单示例 总结 前言 本文是对于线程概念的知识总结 一、线程的概念 在课本上,线程是比进程更轻量级的一种指向流 或 线程是在…

在这里插入图片描述

个人主页 : 个人主页
个人专栏 : 《数据结构》 《C语言》《C++》《Linux》

文章目录

  • 前言
  • 一、线程的概念
    • 线程代码的简单示例
  • 总结


前言

本文是对于线程概念的知识总结


一、线程的概念

在课本上,线程是比进程更轻量级的一种指向流 或 线程是在进程内部执行的一种执行流。
我们再提出两个理解,线程是CPU调度的基本单位 / 进程是承担系统资源的基本实体。
先记住上面的结论
我们知道,进程 = 内核数据结构 + 代码和数据构成的。
在这里插入图片描述
CPU要调度进程,就要有运行队列,而运行队列中排队的就是pcb。CPU通过这些pcb,找到对应的地址空间,进而通过地址空间中的虚拟地址,在页表中映射物理地址,从而找到对应的代码和数据。那么,我们是不是可以将地址空间理解为进程的资源窗口,毕竟进程想要访问正文代码,数据,new和malloc的空间,共享库,栈上的临时数据,命令行参数和环境变量等都是通过地址空间来进行的。

那么,我们如果要创建进程,就要创建对应的pcb,地址空间,将磁盘中的代码和数据加载进内存,再将地址空间中的虚拟地址与物理地址映射构成页表,打开stdin,stdout,stderr构建文件资源描述表,初始化信号处理过程等,这样看来进程创建的成本还挺高的。那为了减少成本,我们能不能在进程内部,再创建多个pcb指向该进程的地址空间,将代码分成多个,并将私有的数据,使每个pcb各自私有一份,可以共享的数据就共享。当CPU来调度其中一个pcb时,其只会运行该进程的一部分代码和一部分数据。我们就可以将这种比以往进程更轻(创建成本)的东西,称为线程。

在这里插入图片描述
在linux程序员看来,描述线程的结构体(TCB Thread control block ) 中属性在pcb中都有。那如果我们把pcb来充当tcb,我们就可以把进程调度,切换的代码在线程级别复用起来,而不用再单独设计线程。也就说,以后再创建线程,只需要创建pcb,然后指向同一个进程地址空间,线程的管理就可以复用进程的管理代码。这就是linux中线程的实现方案。

那就有一个问题,在CPU看来,一个pcb到底是进程还是线程,或者说CPU要不要区分一个pcb是进程还是线程。答案很明显,CPU不需要区分进程和线程,CPU只需要根据pcb的地址空间来执行代码即可。也就是现在CPU拿到一个pcb,其执行流是小于等于进程的(当该进程内有多个pcb,其执行流小于进程;当该进程只有一个pcb,其执行流等于该进程)。那现在什么是进程?进程 = 该进程的所有pcb + 地址空间 + 页表 + 代码和数据。与以往进程的区别就是,现在进程内部有多个执行流,以前进程内部只有一个执行流。
在这里插入图片描述

红色框内的所有东西之和就是进程。
现在我们就可以理解进程是承担分配系统资源的基本实体,线程是参与资源分配。进程创建要申请系统资源,来创建一个pcb,地址空间,页表,代码和数据,线程创建就是创建一个pcb来分配该进程内部的资源(划分地址空间)。实际上,在linux中并没有真正意义的线程,只是用进程的数据结构来模拟的线程。这种描述执行流的pcb就是轻量级进程(LWP light wigth process 执行流小于等于进程)。那以后,CPU调度就不再是进程,而是一个一个的轻量级进程(pcb),也就是线程是CPU调度的基本单位。


线程比进程更轻量化的原因

  • 线程创建销毁更简单,线程只需创建销毁一个pcb来参与资源的分配,而进程创建销毁不仅仅只需要一个pcb
  • 线程在地址空间中运行
  • 线程调度更简单;在同一进程内,线程之间切换是不需要更改地址空间和页表,只需要将运行中产生的临时数据进行切换即可,也就是只需切换少量的上下文数据。但这不是主要原因,在cpu内有一个大的存储空间cache用来进行数据的缓存(热数据),cache在缓存中是以进程为单位的,那理论上,线程做切换,就不需要切换cache,着就是线程切换更简单。因为有局部性原理(如当前访问的代码附近的代码,有可能是下次要访问的代码)给预加载机制,提供理论基础,
    在这里插入图片描述

线程代码的简单示例

经过上面的描述,我们已经对线程有了一定的理解,下面就让我们在代码层面上来看看。

#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>// 新线程
void *ThreadRountine(void *arg)
{const char *threadname = (const char *)arg;while (true){std::cout << "I am a new thread: " << threadname << ", pid: " << getpid() << std::endl;sleep(1);}
}int main()
{pthread_t tid;pthread_create(&tid, nullptr, ThreadRountine, (void*)"thread 1");// 主线程while (true){std::cout << "I am main thread" << ", pid: " << getpid() <<std::endl;sleep(1);}return 0;
}

上面代码,我们创建了一个新线程,并让主线程和新线程都执行死循环。
在这里插入图片描述

在这里插入图片描述

不出所料,只有一个进程在执行,主线程和新线程都在执行,并且pid相同(在同一个进程内)。那如何查看线程呢? ps -aL查看。

在这里插入图片描述
果然有两个线程,其中主线程的LWP 和 PID是相同的。在操作系统中,是通过LWP来识别不同的轻量级进程的。


#include <iostream>
#include <pthread.h>
#include <unistd.h>
#include <sys/types.h>int gnt = 100;
// 新线程
void *ThreadRountine(void *arg)
{const char *threadname = (const char *)arg;while (true){std::cout << "I am a new thread: " << threadname << ", gnt = " << gnt << ", &gnt" << &gnt << std::endl;gnt--;sleep(1);}
}int main()
{pthread_t tid;pthread_create(&tid, nullptr, ThreadRountine, (void*)"thread 1");// 主线程while (true){std::cout << "I am main thread" << ", gnt = " << gnt << ", &gnt" << &gnt  <<std::endl;sleep(1);}return 0;
}

上述代码,我们创建了两个线程,其中新线程式gnt–,两个线程都打印gnt的值和地址。
在这里插入图片描述
在这里插入图片描述
可以发现两个线程共享全局变量gnt。


总结

以上就是我对于线程概念的理解和知识总结。

在这里插入图片描述

http://www.hkea.cn/news/936161/

相关文章:

  • 做网站用哪几个端口 比较好百度贴吧官网网页
  • 弹幕网站是怎么做的百度在线翻译
  • 独立网站域名代发关键词包收录
  • 如何建立门户网站百度可以发布广告吗
  • 网站开发毕设文献郑州网站优化顾问
  • 青海建设银行的官方网站自己制作网页的网站
  • 网站建设的图片叠加步骤过程2021年搜索引擎排名
  • 网站链接到邮箱怎么做搜索引擎推广试题
  • 十堰城市建设网站制作自己的网站
  • 传媒网站建设公司深圳百度seo优化
  • 公司需要网站 该怎么做公司推广咨询
  • 高中男女做那个视频网站seo做的好的网站
  • 网站建设 摄影服务上海seo网站排名优化公司
  • 网页设计中html代码seo博客网站
  • 怎样建设小游戏网站google关键词搜索技巧
  • 淘宝 客要推广网站怎么做全媒体广告代理
  • 那个b2b网站可以做外贸武汉全网推广
  • 深圳css3网站开发多少钱如何策划一个营销方案
  • 织梦统计网站访问量代码网络营销公司如何建立
  • 外贸营销型网站建设今日最新重大新闻
  • 个性化定制网站长春网络推广优化
  • 合肥庐阳区疫情最新消息seo优化首页
  • h5网站制作接单最新中高风险地区名单
  • 北京市住房城乡建设委网站公司怎么在网上推广
  • 网站建设首页怎样插入视频百度指数在线查询小程序
  • 青州网站制作哪家好aso优化哪家好
  • wordpress做网站优点郑州网站seo优化
  • 宝安做棋牌网站建设找哪家公司好湖南长沙疫情最新消息
  • 四川专业网站建设中国十大企业培训机构排名
  • 怎么切页面做网站灰色词首页排名接单