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

一键免费生成网页的网站wordpress 占比

一键免费生成网页的网站,wordpress 占比,wordpress装到哪里,软件培训计划和培训内容Linux的信号和线程-Tech Talk 让技术发出声音​www.ttalk.im什么是线程线程#xff0c;有时被称为轻量级进程(Lightweight Process#xff0c;LWP#xff09;#xff0c;是程序执行流的最小单元。一个标准的线程由线程ID#xff0c;当前指令指针(PC#xff09;#xff0…Linux的信号和线程-Tech Talk 让技术发出声音​www.ttalk.im什么是线程线程有时被称为轻量级进程(Lightweight ProcessLWP是程序执行流的最小单元。一个标准的线程由线程ID当前指令指针(PC寄存器集合和堆栈组成每一个程序都至少有一个线程若程序只有一个线程那就是程序本身。同时线程是进程中的一个实体是被系统独立调度和分派的基本单位线程自己不拥有系统资源只拥有一点儿在运行中必不可少的资源但它可与同属一个进程的其它线程共享进程所拥有的全部资源。一个线程可以创建和撤消另一个线程同一进程中的多个线程之间可以并发执行。由于线程之间的相互制约致使线程在运行中呈现出间断性。因此线程也有就绪、阻塞和运行三种基本状态。就绪状态是指线程具备运行的所有条件逻辑上可以运行在等待处理机运行状态是指线程占有处理机正在运行阻塞状态是指线程在等待一个事件如某个信号量逻辑上不可执行。什么是信号信号是一种IPC通信的形式一般在Unix类Unix或POSIX兼容的系统中使用。信号是一种异步通知进程或同进程中某个指定线程的方式。 当信号被发送到进程的时候操作系统会中断进程的控制流程并且在执行非原子性的CPU指令时可以中断进程。信号使用的风险新手坑信号处理在存在竞态的因为信号本身是异步的在处理一个信号的过程中令一个信号甚至肯能是同类型的信号会被直接发送到进程中请求进程处理。 信号是可以打断系统调用的不谨慎处理会引起程序自身的混乱所以进程的信号处理过程尽量做到没有副作用也不要使用不可重入的函数。Linux的线程LinuxThreads在Linux的上古时代Linux的线程技术和POSIX的标准是不同的它使用自己的LinuxThreads库。这会为我们带来什么影响呢让我们来回顾一下 LinuxThreads 设计细节的一些基本理念系统必须能够响应终止信号并杀死整个进程。以堆栈形式使用的内存回收必须在线程完成之后进行。因此线程无法自行完成这个过程。终止线程必须进行等待这样它们才不会进入僵尸状态。线程本地数据的回收需要对所有线程进行遍历这必须由管理线程来进行。如果主线程需要调用 pthread_exit()那么这个线程就无法结束。主线程要进入睡眠状态而管理线程的工作就是在所有线程都被杀死之后来唤醒这个主线程。为了维护线程本地数据和内存LinuxThreads使用了进程地址空间的高位内存就在堆栈地址之下。 同步元语是使用信号来实现的。例如线程会一直阻塞直到被信号唤醒为止。并且LinuxThreads将每个线程都是作为一个具有惟一进程ID的进程实现的。LinuxThreads接收到终止信号之后管理线程就会使用相同的信号杀死所有其他线程进程。 由于异步信号是内核以进程为单位分发的而LinuxThreads的每个线程对内核来说都是一个进程且没有实现“线程组”因此某些语义不符合POSIX标准比如没有实现向进程中所有线程发送信号。如果核心不提供实时信号LinuxThreads将使用SIGUSR1和SIGUSR2作为内部使用的restart和cancel信号这样应用程序就不能使用这两个原本为用户保留的信号了。在Linux kernel 2.1.60以后的版本都支持扩展的实时信号从_SIGRTMIN到_SIGRTMAX因此不存在这个问题。根据 LinuxThreads 的设计如果一个异步信号被发送了那么管理线程就会将这个信号发送给一个线程如果这个线程现在阻塞了这个信号那么这个信号也就会被挂起因此某些信号的缺省动作难以在现行体系上实现比如SIGSTOP和SIGCONTLinuxThreads只能将一个线程挂起而无法挂起整个进程。LinuxThreads带来了什么问题首先我们说下POSIX是如何定义多线程的POSIX下一个多线程的进程只有一个PID。 根据上面我们对LinuxThreads的描述我们可以总结出LinuxThreads有下面这些问题它使用管理线程来创建线程并对每个进程所拥有的所有线程进行协调。这增加了创建和销毁线程所需要的开销。由于它是围绕一个管理线程来设计的因此会导致很多的上下文切换的开销这可能会妨碍系统的可伸缩性和性能。由于管理线程只能在一个 CPU 上运行因此所执行的同步操作在 SMP 或 NUMA 系统上可能会产生可伸缩性的问题。由于线程的管理方式以及每个线程都使用了一个不同的进程 ID因此 LinuxThreads 与其他与 POSIX 相关的线程库并不兼容。信号用来实现同步原语这会影响操作的响应时间。另外将信号发送到主进程的概念也并不存在。因此这并不遵守 POSIX 中处理信号的方法。我们在这里不关注性能如何只关注POSIX兼容和信号处理问题。NPTLLinuxThreads的问题特别是兼容性上的问题严重阻碍了Linux上的跨平台应用如Apache采用多线程设计从而使得Linux上的线程应用一直保持在比较低的水平。在Linux社区中已经有很多人在为改进线程性能而努力其中既包括用户级线程库也包括核心级和用户级配合改进的线程库。目前最为人看好的有两个项目一个是RedHat公司牵头研发的NPTLNative Posix Thread Library另一个则是IBM投资开发的NGPTNext Generation Posix Threading二者都是围绕完全兼容POSIX 1003.1c同时在核内和核外做工作以而实现多对多线程模型。这两种模型都在一定程度上弥补了LinuxThreads的缺点且都是重起炉灶全新设计的。 NPTL的设计目标归纳可归纳为以下几点POSIX兼容性SMP结构的利用低启动开销低链接开销即不使用线程的程序不应当受线程库的影响与LinuxThreads应用的二进制兼容性软硬件的可扩展能力多体系结构支持NUMA支持在技术实现上NPTL仍然采用1:1的线程模型并配合glibc和最新的Linux Kernel2.5.x开发版在信号处理、线程同步、存储管理等多方面进行了优化。和LinuxThreads不同NPTL没有使用管理线程核心线程的管理直接放在核内进行这也带了性能的优化。Linux线程总结比较新的Linux都已经开始使用NPTL了所以我们可以忽略LinuxThreads的存在了介绍它主要是为了让诸位读者更深入的了解线程和信号的恩恩怨怨不要丢鸡蛋。Linux的信号Linux是如何处理信号的随着Linux的内核版本不断提升Linux的信号现在已经可以按照线程级别的触发了换句话说就是每个线程可以关注自己的信号了并且可以区别性对待了。那我们需要注意什么呢在多线程应用中我们应当使用sigaction来代替singal函数因为按POSIX的说法singal函数并没有明确定义自己在多线程应用中的行为。可以使用pthread_sigmask来为每个线程设置独立的信号掩码。同时在多线程应用中应当避免使用sigprocmask这个函数原因也是POSIX中该函数并没有明确定义自己在多线程应用中的行为。这个时候有人会产生疑问了那么多线程下kill发出的进程级别的信号A怎么办Linux是这样解决的它会把这个信号交付给任意一个没有屏蔽信号A的线程。如果这信号没有被任何线程设置handler进行处理就会触发POSIX规定的默认动作。接着有人就会问我怎么向某个线程发消息呢POSIX为我们准备了pthread_kill函数我们可以直接向特定的线程发送消息。那么如果一个线程收到信号A但是自己没有安装handler会发生什么其实和进程级别的信号处理方法一样直接触发默认动作同样会结束整个进程。如何避免新手坑在具有事件循环的应用中在信号的的handler中可以将信号直接放入程序的队列中立刻返回。这样直到线程从程序的队列中取出这个信号为止整个线程看起来就像没有“中断”。 如果不知道该怎么做去看看著名的libev吧。信号SIGSEGV这个信号也许是大家最不想见到为什么呢我们看这个信号的定义当当前程序对内存的引用无效时就会产生当前信号也就是我们常说的“段违例”。以下几种情况会产生该信号1.进程引用的内存页面不存在例如该页面位于堆和栈之间的映射的区域 2.进程试图更新只读内存页例如程序文本段或已经被标记为只读的内存映射区域 3.进程试图在用户态去访问内核部分的内存好了我们都知道这个信号引发的结果就是进程退出。不过我们都忽视了一个问题在现代的Linux上按照POSIX的定义这个信号是系统产生的线程级别的信号。换句话说如果某个线程A出现了内存引用无效那么产生的信号会投递到线程A的信号队列中而不是像进程级别的信号无法确定接受者是谁。JVM的安全区域如果我们想让所有Java线程停下来的时候在JVM的JavaThread执行到大家所知道的test 特定页面的指令时就会因为更新不可读页面而触发SIGSEGV信号。那么对于那些正在执行native代码的JavaThread该怎么办JVM中的注释写的非常清楚native返回JVM时会检查是否能返回的。好了再多说一句JVM是如果将特定内存保护起来的呢这个需要看操作系统的API了在Linux中是mprotect。总结多读读POSIX标准和Intel的CPU体系结构会让自己在开发变的容易些。
http://www.zqtcl.cn/news/639539/

相关文章:

  • 建一个网站大约多少钱做社区网站怎么做
  • 安阳建设网站企业单位网站建设内容需要什么
  • 网站如何被谷歌收录wordpress搭建企业官网
  • 网站 服务报价网站建设需要具备
  • 鹿泉企业网站建设wordpress使用支付宝当面付
  • 手机网站重要性彩票网站上的走势图是怎么做的
  • 牛牛襄阳网站建设做电商网站需要会些什么问题
  • 唯一做性视频的网站在线股票交易网站开发
  • 做二手的网站有哪些湛江小程序公司
  • 定制型网站建设wordpress md风格
  • 网站建设与推广的实训报告万网会员中心登录入口
  • 做网站如何推销电子商务类型的网站
  • 部署个人网站经典广告推广词
  • 海口模板建站定制南宁品牌网站设计公司
  • 江西网站设计方案网站通栏广告代码
  • 外包网站建设公司网站建设公司的销售好做吗
  • lol做任务领头像网站营销型网站重要特点是?
  • 设计师35岁后的出路嘉兴做网站优化的公司
  • 网站首页包含的内容网站网站注册
  • 企业网站改版建议北京市在建工程项目查询
  • 广州通和通信建设有限公司网站myeclipse怎么做网页
  • 最好的做网站公司有哪些泰安人才网官网登录
  • 怎么用wordpress修改网站源码辽宁省营商环境建设局网站
  • 做网站数据库怎么做wordpress video主题
  • 田园综合体建设网站梧州网站建设有哪些
  • 公司做网站的流程茂名网站建设公司
  • 徐州专业网站建设公司wordpress tag找不到
  • 网站互动推广织梦网站主页代码在后台怎么改
  • 福永自适应网站建设微信小程序功能开发
  • 制作一个动态企业网站狠狠做最新网站