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

湛江找人做网站排名建设银行网站特点分析

湛江找人做网站排名,建设银行网站特点分析,wordpress get_term_link,个人网站备案名称什么是原子性 从一个例子说起#xff0c; x #xff0c;读和写 #xff0c; 如图假设多线程#xff0c;线程1和线程2同时操作变量x#xff0c;进行x的操作#xff0c;那么由于写的过程中#xff0c;都会先读一份x数据到cpu的寄存器中#xff0c;所以这个时候cpu1 和 c…什么是原子性 从一个例子说起 x 读和写 如图假设多线程线程1和线程2同时操作变量x进行x的操作那么由于写的过程中都会先读一份x数据到cpu的寄存器中所以这个时候cpu1 和 cpu2 拿到了相同的变量x假设初始x值为1则cpu1拿到的x为1cpu2拿到的x为1都操作并写回给x后x的值为2。 预期加两次结果为3但是实际由于多线程同时操作同一个变量了 可能产生写覆盖。进一步看这其中还要再提起一个词中断。 中断 多线程 - cpu中断 多线程下常见一个或者多个操作在 CPU 执行时候中断切出再切回。 对于多线程来说程序在运行一段代码的时候可能会中途切出这种来回切出和切回就出现了上面x的情况。产生了写覆盖的问题。 那么不用多线程只用单线程是不是就不会存在中断的问题是不是就安全了其实也不安全。因为线程下面还有协程如python Coroutine或如nodejs中 event loop其虽然不会在cpu运算的时候切出但是会在等待io的时候切出。 单线程 - io中断 单线程下一个或者多个IO操作执行的过程中中断切出再切回。 一个单线程切出的例子拿nodejs中event loop举例worker1 和 worker2分别产生event去累加result但是在累加的过程中会await sleep 模拟等待io这会导致由于等待io而引起的中断切出。 非原子性示例 function sleep(ms: number) {return new Promise(resolve setTimeout(resolve, ms)); }let result 0;async function worker1() {let maxtime1 1;while(maxtime1 100) {let name worker1;// 执行100次)console.log(${name} calculate current time ${maxtime1})// 开始工作let resultCopy result;// 让出await sleep(10);resultCopy 1;result resultCopy;maxtime1 1;} }async function worker2() {let maxtime2 1;while(maxtime2 100) {let name worker2;// 执行100次console.log(${name} calculate current time ${maxtime2})// 开始工作let resultCopy result;// 让出await sleep(10);resultCopy 1;result resultCopy;maxtime2 1;} }(async () {console.log(start calculate)const startTime Date.now();Promise.all([worker1(), worker2()]).then(() {const endTime Date.now();// 预期是200 但是由于会写覆盖所以最终小于200.console.log(耗时: ${endTime - startTime}ms);console.log(result:, result);}).catch((error) {console.error(A worker failed with error:, error);}); })() 运行结果通过结果 甚至输出结果直接就是100因为worker1 和 worker2的并行执行导致每次累加计算前worker1 和 worker2 都拿到相同的值 那么如何避免这种情况让worker1的代码片段执行完再执行的worker2的代码片段不切出达到原子性一种方法就是加锁下面继续看如何加锁达到原子性 原子性示例 通过加锁可以实现代码片段的原子性 如下 import { Mutex } from async-mutex; const mutex new Mutex();function sleep(ms: number) {return new Promise(resolve setTimeout(resolve, ms)); }let result 0;async function worker1() {let maxtime1 1;// 执行100次while(maxtime1 100) {let name worker1;// 开始工作// 锁住,const release await mutex.acquire();console.log(${name} calculate current time ${maxtime1}, before start calulate result: ${result})// rlet resultCopy result;// 让出cpu这里即使让出其它worker由于无法获取锁所以会一直等待await sleep(10);resultCopy 1;// w result resultCopy;console.log(${name} calculate current time ${maxtime1}, after calulate result: ${result})release();maxtime1 1;} }async function worker2() {let maxtime2 1;// 执行100次while(maxtime2 100) {let name worker2;// 开始工作// 锁住,const release await mutex.acquire();console.log(${name} calculate current time ${maxtime2}, before start calulate result: ${result})// rlet resultCopy result;// 让出cpuawait sleep(10);resultCopy 1;// w result resultCopy;console.log(${name} calculate current time ${maxtime2}, after calulate result: ${result})release();maxtime2 1;} }(async () {console.log(start calculate)const startTime Date.now();Promise.all([worker1(), worker2()]).then(() {const endTime Date.now();// 预期是200 但是由于会写覆盖所以最终小于200.console.log(耗时: ${endTime - startTime}ms);console.log(result:, result);}).catch((error) {console.error(A worker failed with error:, error);}); })() 此时在看输出结果可以发现由于有锁worker1 和 worker2是串行累加的不会在执行累加的过程中切出所以最终累加的结果是200符合预期。 同时可以发现由于加锁整体串行会导致整体运行时间增加。这里就不得不多提下Event Loop 是一种异步编程模型io切出本身属于提高效率的设计所以如果不是需要原子性不是同时操作同一个变量则没必要加锁降低效率。 结语 总结 对于编程中的原子性如果说一段代码是原子性的则这段代码无论是cpu 还是 io等待 都不能被切出。这段代码需要完整的执行这才是我们预期的一段代码的原子性。
http://www.eeditor.cn/news/120763/

相关文章:

  • 如何做网站流程图普通小程序开发者工具
  • 我的网站不做推广 百度能搜索到我网站吗秦皇岛公司做网站
  • 衡水网站建设哪家好新浪云平台创建wordpress
  • 建网站所需材料gateface做网站
  • 郴州网站建设建设企业官方网站官网
  • 北京做网站的公司拟昆明网站建设kmdtkj
  • 苏州手机网站开发公司网页制作与网站建设...
  • 哈尔滨网站开发联系薇推广普通话的意义50字
  • 如何用免费个人网站制作WordPress修改模板
  • 超级优化液合肥seo整站优化网站
  • 仿韩国网站源码网络营销应用方式
  • 黄骅市住房和城乡建设局网站阿里云 装好wordpress
  • 北京网站制作济南广州番禺最新头条消息
  • 福州p2p网站建设公司国内知名企业网站
  • 上海专业网站建设服务百度网盟推广案例
  • 棕色网站设计网页制作与网站建设实战大全 pdf下载
  • 江门网站平台建设无锡短视频推广
  • 网站程序开发后怎么上线南宁 网站建设
  • 17一起广州做网站一台网站服务器多少钱
  • 厦门微网站开发网站信用建设应该用什么技术
  • 网站建设微信商城开发石家庄做网站排名公司哪家好
  • 上饶做网站的个人网站制作论文
  • 聊天网站开发登陆建设银行网站异常
  • 网站建设程序员公司网站开发费用计入什么科目
  • 域名备案网站源码媒体查询做响应式网站
  • 深圳网站建设antnwwordpress创建网站
  • 什么网站做玩具的比较多做网站一定需要服务器吗
  • 自助建站免费网站网站开发税目编码
  • 手机网站设计只找亿企邦做网站的背景图片格式大小
  • 兰州专业做网站的公司哪家好神农架网站建设公司