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

网站开发界面设计工具东莞网站建设公司招聘信息

网站开发界面设计工具,东莞网站建设公司招聘信息,本周热点新闻事件,怎么自己做个网站文章目录 1.进程/线程/协程1.1辨别进程和线程的异同1.2优缺点1.2.1进程1.2.2线程 1.3进程/线程之间通信的方法1.3.1进程之间通信的方法1.3.2线程之间通信的方法 1.4什么是线程上下文切换1.5协程1.5.1协程的定义#xff1f;1.5.2使用协程的原因#xff1f;1.5.3协程的优缺点1.5.2使用协程的原因1.5.3协程的优缺点1优点2缺点 1.6什么是线程死锁如何避免1.7杀死进程的方法1.7.1 linux1.7.2 windows 2.线程的生命周期2.1线程的六种生命状态2.2辨别sleep()方法和wait()方法的异同2.3notify()和notifyAll的区别2.4为什么wait()要包在同步块中2.5如何停止一个线程的运行? 3.软连接和硬连接有什么区别4.内核态和用户态5.有哪些进程调度算法5.1先来先服务调度算法5.2最短作业优先调度算法5.3高响应比优先调度算法5.4时间片轮转调度算法 1.进程/线程/协程 1.1辨别进程和线程的异同 进程和线程之间的区别可以从本质区别、开销方面、稳定性方面、内存分配方面、包含关系共五个角度去分析 本质区别 进程是操作系统资源分配的基本单位是程序的一次执行每个进程都有自己的地址空间、内存、数据栈及其他辅助记录运行轨迹的数据线程是任务调度和执行的基本单位是进程的一个实体是CPU调度和分派的基本单位,它是比进程更小的能独立运行的基本单位 开销方面 每个进程都有独立的代码和数据空间程序上下文程序之间的切换会有较大的开销线程可以看做轻量级的进程同一类线程共享代码和数据空间每个线程都有自己独立的运行栈和程序计数器PC线程之间切换的开销小 稳定性方面 进程中某个线程如果崩溃了可能会导致整个进程都崩溃进程中的子进程崩溃并不会影响其他进程。 内存分配方面 系统在运行的时候会为每个进程分配不同的内存空间而对线程而言除了CPU外系统不会为线程分配内存线程所使用的资源来自其所属进程的资源线程组之间只能共享资源 包含关系 没有线程的进程可以看做是单线程的如果一个进程内有多个线程则执行过程不是一条线的而是多条线线程共同完成的线程是进程的一部分所以线程也被称为轻权进程或者轻量级进程 1.2优缺点 1.2.1进程 优点 顺序程序的特点具有封闭性和可再现性程序的并发执行和资源共享。多道程序设计出现后实现了程序的并发执行和资源共享提高了系统的效率和系统的资源利用率。 缺点 操作系统调度切换多个线程要比切换调度进程在速度上快的多。而且进程间内存无法共享通讯也比较麻烦。 1.2.2线程 优点 线程之间切换速度快线程间内存共享资源共享 缺点 调度时, 要保存线程状态频繁调度, 需要占用大量的机时程序设计上容易出错线程同步问题 1.3进程/线程之间通信的方法 1.3.1进程之间通信的方法 由于每个进程的用户空间都是独立的不能相互访问这时就需要借助内核空间来实现进程间通信原因很简单每个进程都是共享一个内核空间。Linux 内核提供了不少进程间通信的方式其中最简单的方式就是管道管道分为「匿名管道」和「命名管道」。 匿名管道顾名思义它没有名字标识匿名管道是特殊文件只存在于内存没有存在于文件系统中shell 命令中的「|」竖线就是匿名管道通信的数据是无格式的流并且大小受限通信的方式是单向的数据只能在一个方向上流动如果要双向通信需要创建两个管道匿名管道是只能 用于存在父子关系的进程间通信匿名管道的生命周期随着进程创建而建立随着进程终止而消失。命名管道突破了匿名管道只能在亲缘关系进程间的通信限制因为使用命名管道的前提需要在文件系统创建一个类型为 p 的设备文件那么毫无关系的进程就可以通过这个设备文件进行通信。另外不管是匿名管道还是命名管道进程写入的数据都是缓存在内核中另一个进程读取数据时候自然也是从内核中获取同时通信数据都遵循先进先出原则不支持 lseek 之类的文件定位操作。消息队列克服了管道通信的数据是无格式的字节流的问题消息队列实际上是保存在内核的「消息链表」消息队列的消息体是可以用户自定义的数据类型发送数据时会被分成一个一个独立的消息体当然接收数据时也要与发送方发送的消息体的数据类型保持一致这样才能保证读取的数据是正确的。消息队列通信的速度不是最及时的毕竟每次数据的写入和读取都需要经过用户态与内核态之间的拷贝过程。共享内存以解决消息队列通信中用户态与内核态之间数据拷贝过程带来的开销它直接分配一个共享空间每个进程都可以直接访问就像访问进程自己的空间一样快捷方便不需要陷入内核态或者系统调用大大提高了通信的速度享有最快的进程间通信方式之名。但是便捷高效的共享内存通信带来新的问题多进程竞争同个共享资源会造成数据的错乱。需要 信号量来保护共享资源以确保任何时刻只能有一个进程访问共享资源这种方式就是互斥访问。信号量不仅可以实现访问的互斥性还可以实现进程间的同步信号量其实是一个计数器表示的是资源个数其值可以通过两个原子操作来控制分别是 P 操作和 V 操作。 1.3.2线程之间通信的方法 在Linux系统中线程间通信的方式包括 互斥锁Mutex线程可以使用互斥锁来保护共享资源确保同时只有一个线程可以访问该资源。条件变量线程可以使用条件变量来等待特定条件的发生以实现线程间的协调和通知。信号量线程可以使用信号量来控制对共享资源的访问实现线程间的同步和互斥。读写锁允许多个线程同时读取共享资源但只允许一个线程写入共享资源。 1.4什么是线程上下文切换 线程在执行过程中会有自己的运行条件和状态也称上下文比如程序计数器虚拟机栈和本地方法栈等。 当出现如下情况的时候会发生线程切换。 主动让出 CPU比如调用了 sleep(), wait() 等。时间片用完因为操作系统要防止一个线程或者进程长时间占用 CPU 导致其他线程或者进程饿死。调用了阻塞类型的系统中断比如请求 IO线程被阻塞。 线程切换意味着需要保存当前线程的上下文比如程序计数器虚拟机栈和本地方法栈留待线程下次占用 CPU 的时候恢复现场。并加载下一个将要占用 CPU 的线程上下文。这就是所谓的 上下文切换。频繁上下文切换就会造成整体效率低下。 1.5协程 1.5.1协程的定义 协程 我们又称为微线程协程它不像线程和进程那样需要进行系统内核上的上下文切换协程的上下文切换是由开发人员决定的。协程是一种用户级的轻量级线程。协程拥有自己的寄存器上下文和栈。协程调度切换时将寄存器上下文和栈保存到其他地方在切回来的时候恢复先前保存的寄存器上下文和栈。因此协程能保留上一次调用时的状态即所有局部状态的一个特定组合每次过程重入时就相当于进入上一次调用的状态换种说法进入上一次离开时所处逻辑流的位置。 1.5.2使用协程的原因 与线程相关的概念就是抢占式多任务Preemptive multitasking而与协程相关的是协作式多任务不管是进程还是线程每次阻塞、切换都需要陷入系统调用(system call)先让CPU跑操作系统的调度程序然后再由调度程序决定该跑哪一个进程(线程)。由于抢占式调度执行顺序无法确定的特点使用线程时需要非常小心地处理同步问题而协程完全不存在这个问题事件驱动和异步程序也有同样的优点。因为协程是用户自己来编写调度逻辑的对于我们的CPU来说协程其实是单线程所以CPU不用去考虑怎么调度、切换上下文这就省去了CPU的切换开销所以协程在一定程度上又好于多线程。 1.5.3协程的优缺点 1优点 无需系统内核的上下文切换减小开销无需原子操作锁定及同步的开销不用担心资源共享的问题单线程即可实现高并发单核 CPU 即便支持上万的协程都不是问题所以很适合用于高并发处理尤其是在应用在网络爬虫中。 2缺点 无法使用 CPU 的多核处处都要使用非阻塞代码 1.6什么是线程死锁如何避免 死锁Deadlock描述的是这样一种情况多个进程/线程同时被阻塞它们中的 一个或者全部都在等待 某个资源被释放 。由于进程/线程被无限期地阻塞因此程序不可能正常终止。 四个必要条件 互斥x资源是独占的且排他使用进程互斥使用资源即任意时刻一个资源只能给一个进程使用其他进程若申请一个资源而该资源被另一进程占有时则申请者等待直到资源被占有者释放。请求并保持进程每次申请它所需要的一部分资源在申请新的资源的同时继续占用已分配到的资源。非抢占进程所获得的资源在未使用完毕之前不被其他进程强行剥夺而只能由获得该资源的进程资源释放循环等待资源有序分配即标序号在发生死锁时必然存在一个进程等待队列{P1,P2,…,Pn},其中P1等待P2占有的资源P2等待P3占有的资源…Pn等待P1占有的资源形成一个进程等待环路环路中每一个进程所占有的资源同时被另一个申请也就是前一个进程占有后一个进程所深情地资源。 破坏死锁那么避免死锁问题就只需要破环其中一个条件就可以最常见的并且可行的就是**使用资源有序分配法来破环环路等待条件**。 例如进程PA使用资源的顺序是R1R2 进程PB使用资源的顺序是R2R1 若采用动态分配有可能形成环路条件造成死锁。 采用有序资源分配法R1的编号为1R2的编号为2 PA申请次序应是R1R2 PB申请次序应是R1R2 1.7杀死进程的方法 1.7.1 linux 首先使用ps命令查找进程的PID进程ID然后使用kill命令加上PID来终止进程。例如 ps -ef | grep 进程名 // 查找进程的PID kill PID // 终止进程1.7.2 windows netstat -ano | findstr 1098 //查询端口号对应的进程id taskkill /T /F /PID //强制/F参数杀死 PID 为 xxx 的所有进程包括子进程/T参数2.线程的生命周期 2.1线程的六种生命状态 如图线程有六种生命状态新建、可执行就绪、运行、阻塞、等待、计时等待、死亡 2.2辨别sleep()方法和wait()方法的异同 相同点两者都可以暂停线程的执行不同点 是否有释放锁 sleep()方法没有释放锁synchronized的锁用于暂停执行任务wait() 方法释放了锁用于线程之间的交互 是否自动苏醒 sleep()方法执行完成后线程会自动苏醒或者也可以使用 wait(long timeout) 超时后线程会自动苏醒。wait() 方法被调用后线程不会自动苏醒需要别的线程调用同一个对象上的 notify()或者 notifyAll() 方法。 归属类不同 sleep()是 Thread 类的静态本地方法 sleep()方法是让当前线程暂停执行不涉及对象锁wait() 则是 Object类的 本地方法wait()是让获得对象锁的线程实现等待会自动释放当前线程占有的对象锁。 2.3notify()和notifyAll的区别 同样是唤醒等待的线程同样最多只有一个线程能获得锁同样不能控制哪个线程获得锁。 区别在于 notify 唤醒一个线程其他线程依然处于wait的等待唤醒状态如果被唤醒的线程结束时没调用notify其他线程就永远没人去唤醒只能等待超时或者被中断 notifyAll 唤醒全部线程所有线程退出wait的状态开始竞争锁但只有一个线程能抢到这个线程执行完后其他线程又会有一个幸运儿脱颖而出得到锁 2.4为什么wait()要包在同步块中 线程安全在同步块中调用wait()方法可以确保线程在调用wait()前已经获取了对象的锁避免多线程之间的竞争和数据不一致性问题。对象监视器wait()方法会释放对象的监视器monitor其他线程可以获取该对象的监视器并执行同步操作确保线程之间的协作和同步。唤醒机制当调用wait()方法后线程会进入等待状态只有在其他线程调用notify()或notifyAll()方法唤醒该线程时线程才会继续执行。在同步块中调用wait()可以保证线程被正确唤醒。 2.5如何停止一个线程的运行? 主要有这些方法 异常法停止线程调用interrupt()方法后在线程的run方法中判断当前对象的interrupted()状态如果是中断状态则抛出异常达到中断线程的效果。在沉睡中停止先将线程sleep然后调用interrupt标记中断状态interrupt会将阻塞状态的线程中断。会抛出中断异常达到停止线程的效果stop()暴力停止线程调用stop()方法会被暴力停止方法已弃用该方法会有不好的后果强制让线程停止有可能使一些请理性的工作得不到完成。使用return停止线程调用interrupt标记为中断状态后在run方法中判断当前线程状态如果为中断状态则return能达到停止线程的效果。 3.软连接和硬连接有什么区别 软连接实际上是一个指向目标文件的路径的符号链接类似于Windows系统中的快捷方式创建软连接不会占用目标文件的inode节点只是简单地指向目标文件的路径。删除原始文件后软连接仍然存在但指向的目标文件失效称为悬空链接。软链接可以跨文件系统创建软连接。 硬连接是指多个文件实际上指向同一个inode节点即多个文件共享同一块数据块。创建硬连接会增加目标文件的链接计数删除任何一个硬连接并不会影响其他硬连接指向的文件数据。只能在同一文件系统内创建硬连接。 4.内核态和用户态 内核态和用户态是操作系统中的两种运行模式。它们的主要区别在于权限和可执行的操作 内核态Kernel Mode在内核态下CPU可以执行所有的指令和访问所有的硬件资源。这种模式下的操作具有更高的权限主要用于操作系统内核的运行。用户态User Mode在用户态下CPU只能执行部分指令集无法直接访问硬件资源。这种模式下的操作权限较低主要用于运行用户程序。 内核态的底层操作主要包括内存管理、进程管理、设备驱动程序控制、系统调用等。这些操作涉及到操作系统的核心功能需要较高的权限来执行。 分为内核态和用户态的原因主要有以下几点 安全性通过对权限的划分用户程序无法直接访问硬件资源从而避免了恶意程序对系统资源的破坏。稳定性用户态程序出现问题时不会影响到整个系统避免了程序故障导致系统崩溃的风险。隔离性内核态和用户态的划分使得操作系统内核与用户程序之间有了明确的边界有利于系统的模块化和维护。 内核态和用户态的划分有助于保证操作系统的安全性、稳定性和易维护性。 5.有哪些进程调度算法 5.1先来先服务调度算法 顾名思义先来后到每次从就绪队列选择最先进入队列的进程然后一直运行直到进程退出或被阻塞才会继续从队列中选择第一个进程接着运行。 5.2最短作业优先调度算法 顾名思义它会 优先选择运行时间最短的进程来运行这有助于提高系统的吞吐量。 5.3高响应比优先调度算法 每次进行进程调度时先计算「响应比优先级」然后把「响应比优先级」最高的进程投入运行 响应比优先级」的计算公式 5.4时间片轮转调度算法 每个进程被分配一个时间段称为时间片*Quantum*即允许该进程在该时间段中运行。 如果时间片用完进程还在运行那么将会把此进程从 CPU 释放出来并把 CPU 分配给另外一个进程如果该进程在时间片结束前阻塞或结束则 CPU 立即进行切换
http://www.hkea.cn/news/14333428/

相关文章:

  • 闽清建设局网站门户网站建设进度
  • 常德市建设局网站郑州网站推广排名
  • 电子商务网站开发与设计网站没被收录
  • cnzz如何查询某个网站频道的流量外网如何查看局域网建设的网站
  • 建设网站个人网上银行wordpress自动加p标签
  • 阿里云网站建设一次付费代驾网站开发
  • 网站建设费用文档asia域名
  • 表白时刻网站网站建设程序流程图
  • 网站设计制作公司需要什么资质网页游戏制作过程
  • 立方米网站库尔勒北京网站建设
  • 盐城哪有做网站建设的触屏手机网站设计
  • 河南营销型网站找清包工程上什么网
  • 中粮网站是哪个公司做的北京模板网站建设公司
  • thinkphp 网站设置功能网页模版
  • 免费建立网站的有哪里免费域名注册网站
  • 建设部网站焊工证件查询怎么做网页excel
  • 江苏网站建设简介模板域名怎么用
  • 青岛网站定制开发建立门户网站的意义
  • 做网站推广也要营业执照吗快速微信网站开发
  • 网站建设公司哪家最好wordpress痞子
  • 校园网站建设合同百度文库开发网站的流程步骤
  • 做网站 人员网络系统管理属于哪类专业
  • 大同推广型网站建设做电影网站程序好用吗
  • 毕设做网站太简单太平洋手机
  • 网站后台怎么做友情链接今天天津最新通告
  • 电子商务中网站建设拼多多网站怎么建设的
  • 网站开发一次性费用wordpress主题UIGREAT
  • 纺织服装板块上市公司网站建设腾讯云wordpress升级慢
  • 上饶公司做网站云主机 网站 多个二级域名 seo优化
  • php网站开发实例教程的作者小程序源码分享网