骨灰级程序员总结:多进程/多线程(多线程多进程使用场景)
citgpt 2024-09-09 02:15 7 浏览 0 评论
程序分为两种:单进程/单线程 和 多进程/多线程 两种。
(为了方便,下文以“单”代指 单进程/单线程 ,“多”代指 多进程/多线程 )。
“单”程序不用考虑并发问题(比如浏览器中的javascript),复杂度会比“多”程序低很多。
多进程/多线程 程序在很多时候可以提高程序的效率,尤其是网络时代的到来。“多”程序的开发需要转变以往开发“单”程序时的开发思路和方式,以及对程序运行的理解,多进程对共享资源的使用,并发问题等等,这些给程序的开发维护带来了更大的挑战,对程序员的要求更高。
参考资料
【开源组件】深入浅出Nginx
nginx、swoole高并发原理初探 - 畅想代码 - SegmentFault
1、同步与异步 ①同步与异步的理解 同步与异步的重点在消息通知的方式上,也就是调用结果通知的方式。 同步 当一个同步调用发出去后,调用者要一直等待调用结果的通知后,才能进行后续的执行 异步: 当一个异步调用发出去后,调用者不能立即得到调用结果的返回。 异步调用,要想获得结果,一般有两种方式: 1、主动轮询异步调用的结果; 2、被调用方通过callback来通知调用方调用结果。 ②:生活实例 同步买奶茶:小明点单交钱,然后等着拿奶茶; 异步买奶茶:小明点单交钱,店员给小明一个小票,等小明奶茶做好了,再来取。 异步买奶茶,小明要想知道奶茶是否做好了,有两种方式: 1、小明主动去问店员,一会就去问一下:“奶茶做好了吗?”...直到奶茶做好。 2、等奶茶做好了,店员喊一声:“小明,奶茶好了!”,然后小明去取奶茶。 **关于2问题:小明得一直都在,虽然他不用一遍遍去问好了没有,但是他得等着店员什么时候来叫他,并且也不能预料到什么时候回来叫他,所以他不得不一直等着不能离开奶茶店,只不过他等着的时候可以干点别的小事而已。**
异步是一种编程模型,MQ是一种异步实现方式。
(补充:队列实际上也是一种异步模型的应用)
你可以走离开店铺,但是你得告诉服务员一个凭证,以便奶茶做好后可以联系到你。
linux - 单线程多路复用和多线程加锁的区别 - SegmentFault
大家做linux C/C++网络编程时,啥时用到多线程或者多进程啊? - SegmentFault
多个进程或者线程无非就是要多占用点CPU的时间片,让程序运行效率更高点。不过进程间通信,线程上下文切换,同步等问题同样会对性能有些影响。服务器程序为了提高CPU的利用率,采用多进程或多线程的模型是比较常见的做法,而客户端程序一般来说的确单进程单线程就可以了。另外 @Hacken 的回答我不赞同,并不是说单进程和单线程的模型就无法同时服务多个客户端了,这里面主要要依赖IO复用技术。反过来讲,同时服务1000个客户端,难道要同时开1000个线程?显然不可能。
生活中常说的,你们两个人的工作要同步啊,什么跟什么事同步进行啊之类的,这个同步的意思指的是,强调某些事物或工作的频率要保持一致。这个同步和编程中的同步不同哦,就像雷锋和雷峰塔的关系。
网络编程 - I/O复用到底是什么意思 - SegmentFault
I/O多路复用和Socket - 全干工程师 - SegmentFault
select、poll、epoll之间的区别总结[整理] - Anker's Blog - 博客园
IO多路复用之epoll总结 - Anker's Blog - 博客园
异步通知,那我要怎么通知你啊? · php笔记 · 看云
定时-时钟-阻塞 · php笔记 · 看云
多进程/多线程 · php笔记 · 看云
javascript - 究竟能不能用死循环?或者其实我们就活在一个死循环的世界中? - SegmentFault
mysql - PHP定时通知、按时发布怎么做? - SegmentFault
工作线程数究竟要设置为多少 | 架构师之路
为什么操作系统的单线程比多线程好的多?-悟空问答
架构师之路,季度精选40篇
进程和线程到底谁才是鸡肋?他们的区别在哪里?神级程序员解惑!
为什么串口比并口快?-OSDIY的回答-悟空问答
电脑cpu的核心与线程是什么意思?-蒙面侍卫的回答-悟空问答
一篇文章看懂Java并发和线程安全
谈到多线程,我们很容易与高性能画上等号,但是并非如此,举个简单的例子,从1加到100,用四个线程计算不一定比一个线程来得快。因为线程的创建和上下文切换,是一笔巨大的开销。
阻塞非阻塞与同步异步有什么区别?-IT老友的回答-悟空问答
你最后一段说错了。阻塞是指,调用方必须等到下游被调用方执行完毕返回结果才能继续执行,在被调用方未执行完毕返回结果前,上游调用方处于阻塞挂起状态。这就是阻塞。非阻塞是下游被调用方的执行不会阻塞上游调用方,等到执行完毕,将结果通知到上游调用方,在此期间,上游调用方不会被阻塞,可以继续做别的事,然后等着通知就可以了。
程序中的代码段、数据段、堆、栈是怎么回事
当你在 Linux 上启动一个进程时会发生什么?
php非阻塞访问url 解析socket阻塞与非阻塞,同步与异步 - 橙虚缘空间 - CSDN博客
电脑CPU有超线程,为什么手机CPU没有超线程设计?-数码侦探的回答-悟空问答
超线程技术是指,对于单一处理器核心来说来说,虽然也可以每秒钟处理成千上万条指令,但是在某一时刻,只能够对一条指令进行处理,也就是单线程。超线程技术能够把一个物理处理器在软件层变成两个逻辑处理器,可以使处理器在某一时刻,同步并行处理更多指令和数据,也就是超出数量(2)的线程数。
同步 & 异步
同步与异步重要的区别是在于是否阻塞,以及调用结果的通知(返回)方式。
为了便于说明,我们假定:
A:调用方
B:被调用方
调用方 & 被调用方 例子: 调用方:JS主线程setTimeout() 被调用方:匿名函数 (被调用方有可能是一个函数,有可能是一个代码结构,闭包,表达式等等)
同步
A阻塞调用B,阻塞调用的意思就是,在B为执行完并返回结果之前,A会一直处于被阻塞挂起的状态,直至B返回结果,A才继续向下执行。
异步
A非阻塞调用B,非阻塞调用的意思就是,A调用B,A不会被阻塞,在B执行完返回结果之前,A可以继续向下执行。这个具体怎么做到的,根据不同语言的特性有不同的实现方法,比如在JS是利用事件循环实现的。
特点分析
同步调用,调用方的继续执行依赖于被调用方的返回结果。(需要调用方立即返回结果)
异步调用,调用方的继续执行不依赖于被调用方的返回结果。(不需要调用方立即返回结果)
同步调用不能使用MQ
异步调用的可以使用MQ
提示:我们平常写的普通代码,就是自上而上的同步代码,同步调用,一条一条的自上而下的按顺序执行。
另外要注意的是,不要受编程语言所限,很多编程语言语法、调用形式不同,但是所做的事基本是相同的,编程语言只是一层外表,不要被这层外表所蒙蔽了,它们最终都会转变为一系列的系统调用,或者是有效的指令集而已。
相关推荐
- js中arguments详解
-
一、简介了解arguments这个对象之前先来认识一下javascript的一些功能:其实Javascript并没有重载函数的功能,但是Arguments对象能够模拟重载。Javascrip中每个函数...
- firewall-cmd 常用命令
-
目录firewalldzone说明firewallzone内容说明firewall-cmd常用参数firewall-cmd常用命令常用命令 回到顶部firewalldzone...
- epel-release 是什么
-
EPEL-release(ExtraPackagesforEnterpriseLinux)是一个软件仓库,它为企业级Linux发行版(如CentOS、RHEL等)提供额外的软件包。以下是关于E...
- FullGC详解 什么是 JVM 的 GC
-
前言:背景:一、什么是JVM的GC?JVM(JavaVirtualMachine)。JVM是Java程序的虚拟机,是一种实现Java语言的解...
-
2024-10-26 08:50 citgpt
- 跨域(CrossOrigin)
-
1.介绍 1)跨域问题:跨域问题是在网络中,当一个网络的运行脚本(通常时JavaScript)试图访问另一个网络的资源时,如果这两个网络的端口、协议和域名不一致时就会出现跨域问题。 通俗讲...
- 微服务架构和分布式架构的区别
-
1、含义不同微服务架构:微服务架构风格是一种将一个单一应用程序开发为一组小型服务的方法,每个服务运行在自己的进程中,服务间通信采用轻量级通信机制(通常用HTTP资源API)。这些服务围绕业务能力构建并...
- 深入理解与应用CSS clip-path 属性
-
clip-pathclip-path是什么clip-path 是一个CSS属性,允许开发者创建一个剪切区域,从而决定元素的哪些部分可见,哪些部分会被隐...
-
2024-10-25 11:51 citgpt
- Request.ServerVariables 大全
-
Request.ServerVariables("Url")返回服务器地址Request.ServerVariables("Path_Info")客户端提供的路...
- python操作Kafka
-
目录一、python操作kafka1.python使用kafka生产者2.python使用kafka消费者3.使用docker中的kafka二、python操作kafka细...
- Runtime.getRuntime().exec详解
-
Runtime.getRuntime().exec详解概述Runtime.getRuntime().exec用于调用外部可执行程序或系统命令,并重定向外部程序的标准输入、标准输出和标准错误到缓冲池。...
- promise.all详解 promise.all是干什么的
-
promise.all详解promise.all中所有的请求成功了,走.then(),在.then()中能得到一个数组,数组中是每个请求resolve抛出的结果...
-
2024-10-24 16:21 citgpt
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracleclient (56)
- springbatch (59)
- oracle恢复数据 (56)
- 简单工厂模式 (68)
- 函数指针 (72)
- fill_parent (135)
- java配置环境变量 (140)
- linux文件系统 (56)
- 计算机操作系统教程 (60)
- 静态ip (63)
- notifyicon (55)
- 线程同步 (58)
- xcode 4 5 (60)
- 调试器 (60)
- c0000005 (63)
- html代码大全 (61)
- header utf 8 (61)
- 多线程多进程 (65)
- require_once (60)
- 百度网盘下载速度慢破解方法 (72)
- 谷歌浏览器免费入口 (72)
- npm list (64)
- 网站打开速度检测 (59)
- 网站建设流程图 (58)
- this关键字 (67)