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

口碑最好的旅游软件排名网站关键词推广优化

口碑最好的旅游软件排名,网站关键词推广优化,wordpress语音插件,吴忠网站建设公司个人主页 #xff1a; 个人主页 个人专栏 #xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、线程的概念线程代码的简单示例 总结 前言 本文是对于线程概念的知识总结 一、线程的概念 在课本上#xff0c;线程是比进程更轻量级的一种指向流 或 线程是在… 个人主页 个人主页 个人专栏 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、线程的概念线程代码的简单示例 总结 前言 本文是对于线程概念的知识总结 一、线程的概念 在课本上线程是比进程更轻量级的一种指向流 或 线程是在进程内部执行的一种执行流。 我们再提出两个理解线程是CPU调度的基本单位 / 进程是承担系统资源的基本实体。 先记住上面的结论 我们知道进程 内核数据结构 代码和数据构成的。 CPU要调度进程就要有运行队列而运行队列中排队的就是pcb。CPU通过这些pcb找到对应的地址空间进而通过地址空间中的虚拟地址在页表中映射物理地址从而找到对应的代码和数据。那么我们是不是可以将地址空间理解为进程的资源窗口毕竟进程想要访问正文代码数据new和malloc的空间共享库栈上的临时数据命令行参数和环境变量等都是通过地址空间来进行的。 那么我们如果要创建进程就要创建对应的pcb地址空间将磁盘中的代码和数据加载进内存再将地址空间中的虚拟地址与物理地址映射构成页表打开stdinstdoutstderr构建文件资源描述表初始化信号处理过程等这样看来进程创建的成本还挺高的。那为了减少成本我们能不能在进程内部再创建多个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.hint 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.dnsts.com.cn/news/250370.html

相关文章:

  • 苏州本地网站建设wordpress主页不加index.php 打不开
  • 江西省城乡住房建设厅网站静态网站开发语言有哪些
  • 网站建设规划设计报告网页上上传wordpress
  • 国外可以做推广的网站福州企业网站模板建站
  • 南京关键词网站排名织梦网站文章相互调用
  • 有什么做动图比较方便的网站一个网站后台怎么做
  • wordpress 手机站插件玉树州网站建设公司
  • 计算机专业网站开发开题报告鞍山58同城
  • 做有声小说网站美术生十大最烂专业
  • 长沙做网站哪家好天门市网站建设
  • 订票网站模板广点通广告投放平台登录
  • 建浏览器网站制作微网站开发平台有哪些
  • 建站平台在线提交表格功能中国建设人才网官网查询
  • 温江做网站公司厦门成品网站
  • 快速建站哪里好江苏营销型网站公司
  • 建立网站的正确方法电力建设论坛
  • 哈尔滨做平台网站平台公司学院网站设计模板
  • 做网站有哪些技术网站线框图
  • 免费名片在线设计网站企业做网站的好处千秋网络
  • 口碑好的网站定制公司深做网站公司
  • 企业网站的建设与应用开题报告南沙开发区建设和交通局网站
  • 网站建设工作策划书最热门网页游戏排行榜
  • 有模板做ppt的网站有哪些东莞物流网站建设
  • 建站系统低价建站新闻资讯商标注册费用大概多少?
  • 可以找题目做的网站海外贸易网站
  • 线上做交互的网站企业网站博客上如何推广
  • php 网站 上传到空间网站建设的通知
  • 珠海百度关键字优化深圳网站推广优化培训
  • 如何进行网站推广?网站推广的基本手段有哪些郑州建设网站推广公司
  • 卡片式设计 网站花西子网络营销策划方案