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

网站制作公司教你怎么制作网站企业号官网入口

网站制作公司教你怎么制作网站,企业号官网入口,漂亮的网站建设中静态页,长沙seo优化服务#x1f57a;作者#xff1a; 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 #x1f618;欢迎关注#xff1a;#x1f44d;点赞#x1f64c;收藏✍️留言 #x1f3c7;码字不易#xff0c;你的#x1f44d;点赞#x1f64c;收藏❤️关注对我真的… 作者 主页 我的专栏C语言从0到1探秘C数据结构从0到1探秘Linux菜鸟刷题集 欢迎关注点赞收藏✍️留言 码字不易你的点赞收藏❤️关注对我真的很重要有问题可在评论区提出感谢阅读 文章目录 前言线程的基本概念Linux中的线程Linux线程与进程区别进程和线程的关系Linux线程和接口的认识线程的数据线程的私有数据线程的共有数据 看看猪跑 线程的优缺点了解线程的优点线程的缺点线程异常 线程用途 前言 本篇主要介绍一下线程相关的知识~ 线程的基本概念 在一个程序里的一个执行路线就叫做线程thread。更准确的定义是线程是“一个进程内部的控制序列”一切进程至少都有一个执行线程线程在进程内部运行本质是在进程地址空间内运行在Linux系统中在CPU眼中看到的PCB都要比传统的进程更加轻量化透过进程虚拟地址空间可以看到进程的大部分资源将进程资源合理分配给每个执行流就形成了线程执行流进程是承担分配系统资源的基本实体线程是CPU调度的基本单位 理解 一个进程对应着的线程应该1它至少要含有一个线程才能维持进程的存在所谓的更加轻量化指的是每个线程都享有进程内的一定的资源并负责各自的任务相对来说就更加精细化和轻量化所以说在内核视角中线程是CPU调度的基本单位承担进程资源的一部分基本实体。 毫无疑问在操作系统中存在大量的进程现在我们知道一个进程对应着至少一个线程那么可以推断在操作系统中会存在更多的线程既如此操作系统为了管理它就会想办法将它们组织起来之前将进程的时候讲过操作系统管理的法则是“先描述再组织”进程是用一个叫PCB的结构体来描述的线程是用一个叫TCB的结构体来描述的在windows操作系统中就是这样管理线程的不过在Linux中则使用了一种巧妙的方法来管理。 Linux中的线程 之前在进程部分我们讲过 进程 程序 PCB mm_struct 页表和mmu 物理地址Linux在创造线程概念的时候并没有像上面我们所推断的一样创造TCB结构体来管理每一个线程 而是复用了进程的PCB结构体如下图。 这些线程的task_struct和进程task_struct共享同一个进程地址空间每个线程都会使用其中部分代码和数据但是CPU并不管这些它只管执行就好这样的优点是操作系统只需要将“精力”专注于线程间的资源分配就好了。 Linux线程与进程区别 我们在创建进程的时候通常会为进程创建一个独立的程序地址空间来保证它的独立性而线程则恰恰相反它们只创建PCB共用一个进程地址空间。 但是同样的进程间为了通信或者是其他目的也会选择性的共用一块公共资源而线程为了保证自己能够正确运行也会有一些相对其他线程独立的资源。 主要区别如下 进程具有独立性 但是一部分资源是可以共享的管道 ipc等线程大部分资源是共享的 但是一部分资源是私有的 PCB 栈 上下文等 进程和线程的关系 如果我们把国家比作一个操作系统 那么国家中的每个家庭就是一个进程。每个家庭之间是相互独立的不可能说今天另外一个家庭的人不经过你的同意就住进你家里。 但是家庭与家庭之间也需要通信可能周末会邀请关系好的邻居上你家客厅做客。 家庭中的每个人就可以看作是线程在这个家里大部分的资源是共享的但是每个人也有自己的隐私所以说一部分资源是私有的。 Linux线程和接口的认识 在Linux中线程是用进程模拟实现的所以说Linux中不会给我们提供线程的操作接口 这里解释下 其实Linux不是没有能力去提供这些操作接口 而是它想要保持一个相对自由的状态给用户 而是给我们提供了一个在同一个进程地址空间中创建PCB的方法 分配给资源指定的PCB。 但是作为一个用户来说 使用这种方法的学习成本太高了 我们更需要一个完整的线程库 所以说一些应用级的开发工程师就在应用层对于轻量级的Linux接口进行封装成为了我们经常使用的原生线程库pthread库。 线程的数据 线程的数据分为私有的数据和共有的数据在同一个进程就决定了多个线程的全部数据不会都是私有的而在同一个进程的多个线程就决定了必然有共有的部分。 线程的私有数据 线程ID 这个很好理解 因为我们要使用线程ID来区分每个线程一组寄存器 这组寄存器用来保存线程的上下文信息栈 每个线程都有临时的数据需要压栈 如果不区分那数据就全乱了信号屏蔽字调度优先级 线程的共有数据 因为多个线程是在同一个进程地址空间中 所以说进程地址空间的代码段和数据段都是共享的 如果定义一个函数 在各线程中都可以调用如果定义一个全局变量 在各线程中都可以访问到 除此之外 各线程还共享以下进程资源和环境 文件描述符表 进程打开一个文件后其他线程也能够看到每种信号的处理方式SIG_IGN、SIG_DFL或者自定义的信号处理函数当前工作目录cwd用户ID和组ID等等 看看猪跑 前面讲了这么多接下来我们先创建一个线程然后让它跑一跑看看。 再写代码之前还要介绍一个创建线程的函数它也是pthread库中的。 它就是pthread_create函数 int pthread_create(pthread_t *thread, const pthread_attr_t *attr, void *(*start_routine) (void *), void *arg); 返回值线程创建成功返回0 失败返回错误码这里值得注意的是在线程库中 几乎所有的返回值都是成功返回0 失败返回错误码 参数说明thread获取创建成功的线程ID 该参数是一个输出型参数attr: 用于设置创建线程的属性 如果我们传入NULL则设置为默认属性start_routine这是一个函数地址 传入我们想要这个线程执行的函数arg 传给线程例程的参数 默认是void* 类型 记得类型强转不然会报警告下面是猪跑 : ) makefile mycode:mycode.ccg -o $ $^ -l pthread.PHONY:cleanclean:rm -f mycode需要注意的是有些机器上面不加-l pthread在运行的时候会报错这是因为找不到库文件所导致的。 mycode.c #include stdio.h #include stdlib.h #include pthread.h #include unistd.hvoid* run_thread(void* args) {char* msg (char*)args;while(1){printf(Im a thread my msg is:%s\n , msg);sleep(1);} }int main() {pthread_t tid;pthread_create(tid ,NULL ,run_thread ,(void*)thread 1);while(1){printf(Im main thread\n);sleep(1);}return 0; }上面代码的意思是我们创建一个子线程 这个线程不停的打印参数发送过去的消息 同时我们的主进程不停的打印另外的信息 最后的结果如下 我们可以看到两个循环在同时进行 以前可从来没有见过这样的情况 使用ps -aL查看轻量级进程 我们可以看到多了两个进程但是他们的PID是一样的但是它们的LWP却不同 其实在操作系统调度的时候看的就是LWP 但是之间学进程的时候说操作系统调度的时候看的是PID 难道说错了 实际上都是对的在当时的语境下我们只学过单进程执行流此时进程就只对应着一个线程此时的PID等于LWP所以怎么说也没问题。 但是在现在学了线程以后我们就要注意看的什么情况下了。 线程的优缺点了解 线程的优点 创建一个新线程的代价要比创建一个新进程小得多与进程之间的切换相比 线程之间的切换需要操作系统做的工作要少很多线程占用的资源要比进程少很多能充分利用多处理器的可并行数量在等待慢速IO操作结束的同时 程序可执行其他的计算任务计算密集型应用 为了能在多处理器系统上运行 将计算分解到多个线程中实现IO密集型应用 为了提高性能 将IO操作重叠 线程可以同时等待不同的IO操作 计算密集型 执行流的大部分任务 主要以计算为主 比如加密解密 大数据查找等 IO密集型 执行流的大部分任务 主要以IO为主 比如刷磁盘 访问数据库 访问网络等 线程的缺点 性能损失 一个很少被外部事件阻塞的计算密集型线程往往无法与其他线程共享同一个处理器 如果计算密集型线程的数量比可用的处理器多 那么可能会有较大的性能损失 这里的性能损失指的是增加了额外的同步和调度开销 而可用的资源不变健壮性降低 编写多线程需要更全面更深入的考虑 在一个多线程程序里 因时间分配上的细微偏差或者因共享了不该共享的变量而造成不良影响的可能性是很大的 换句话说 线程之间是缺乏保护的缺乏访问控制 进程是访问控制的基本粒度 在一个线程中调用某些OS函数会对整个进程造成影响编程难度提高 编写与调试一个多线程程序比单线程程序困难得多 线程异常 如果单个线程出现异常 比如说出现除零错误等 有可能会导致整个进程崩溃 造成这样的原因是 操作系统发送信号是向进程发送的 线程用途 合理的使用多线程 能提高CPU密集型程序的执行效率合理的使用多线程 能提高IO密集型程序的用户体验如生活中我们一边写代码一边下载开发工具 就是多线程运行的一种表现
http://www.tj-hxxt.cn/news/219166.html

相关文章:

  • 电子商务网站建设合同pc建站网站
  • 企业网站建设一般包含哪些内容黄岩网站制作
  • 动态ip可以做网站智能手机应用开发
  • 沙河企业做网站山西网站制作公司
  • 代理加盟微信网站建设怎样做seo网站链接
  • 网站需要什么费用临沧网站建设公司
  • 网站服务器不稳定做网站推广怎么跟客户沟通
  • 设计一个官方网站推广广告泰安可以做网站的公司
  • 广州网站建设及推广在线网页制作
  • 进了网站的后台系统 怎么改公司的网站wordpress百度推送插件
  • 分类信息系统网站模板梅州网页设计培训报价
  • 网站icon怎么设置app制作
  • 手机版企业网站静态页面网站站标代码写进到静态页面了 怎么不显示呢?
  • 做网站不会配色怎么办湘潭做网站问下磐石网络
  • 网站建设优化推广教程门户网站开发工具软件
  • 青岛市崂山区建设局网站网站前端跟后端怎么做
  • 中英文企业网站公司简介模板免费文字
  • 怎么做专门卖二手衣服的网站seo推广公司 什么意思
  • 汉字域名的网站闵行网页设计
  • 网站如何防止别人抄袭wordpress index.txt
  • flash网站开源企业创建网站的途径都有啥
  • 医院网站建设 利法拉网络素材网站在哪里找
  • 江西响应式网站建设哪家好最新项目首码发布平台
  • 南昌网站建设的流程西安找公司建网站
  • 专业网站建设行业现状辽宁建设工程信息网新版网址
  • 中国建设银行理财网站上海 网站设计 公司
  • 网站建设应注意哪些事项网站是否能够被恶意镜像
  • 邯郸移动网站建设报价专业网站制作哪家专业
  • 做网站到底能不能赚钱建设银行北海分行网站
  • 网站开发得花多少钱外贸公司查询