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

个人如何做微商城网站设计石家庄网站建设需要多少钱

个人如何做微商城网站设计,石家庄网站建设需要多少钱,做网站卖广告位赚钱,好用的黄页网一. 并发介绍 进程和线程 进程是程序在操作系统中一次执行过程#xff0c;系统进程资源分配和调度的一个独立单位。线程是进程执行的实体#xff0c;是CPU调度和分派的基本单位#xff0c;它是比进程更小的能独立运行的基本单位。一个进程可以创建和撤销多个线程#xff0c…一. 并发介绍 进程和线程 进程是程序在操作系统中一次执行过程系统进程资源分配和调度的一个独立单位。线程是进程执行的实体是CPU调度和分派的基本单位它是比进程更小的能独立运行的基本单位。一个进程可以创建和撤销多个线程同一个进程中的多个线程之间可以并发执行。 并发和并行 多线程程序在一个核CPU上运行就是并发。多线程程序在多个核CPU上运行就是并行。 协程和线程 协程独立的栈空间共享堆空间调度由用户自己控制本质有点类似于用户级线程这些用户级线程的调度也是自己实现的。线程一个线程上可以跑多个协程协程是轻量级线程。 goroutine只是由官方实现的超级“线程池”。 每个实际4~5KB的栈内存占用和由于实现机制而大幅减少的创建和销毁开销是go高并发的根本原因。 并发主要是由切换时间片来实现同时运行并行则是直接利用多核实现多线程的运行go可以设置使用核数以发挥多核计算机的能力。 goroutine奉行通过通信来共享内存而不是共享内存来通信。 二. Goroutine 2.1 介绍 在java/c中我们要实现一个并发编程我们通常需要自己维护一个线程池并且需要自己取包装一个有一个任务同时需要自己去调度线程执行任务并维护上下文切换这一切通常会耗费程序员大量心智。那么能不能有一种机制程序员只需要定义很多任务让系统去帮助我们把这些任务分配到CPU上实现并发执行呢 Go语言中的goroutine就是这样一种机制goroutine的概念类似于线程但goroutine是由Go的运行时(runtime)调度和管理的。Go程序会智能的将goroutine中的任务合理的分配给每一个CPU。Go语言之所以被称为现代化的编程语言就是因为它在语言层面已经内置了调度核上下文切换的机制。 在Go语言编程中你不需要去自己写进程线程协程你的技能包里只有一个技能-goroutine当你需要让某个任务并发执行的时候你只需要把这个任务包装成一个函数开启一个goroutine去执行这个函数就可以了。 使用goroutine Go语言中使用goroutine非常简单只需要在调用函数的时候在前面加上go关键字就可以为一个函数创建一个goroutine。 一个goroutine必定对应一个函数可以创建多个goroutine去执行相同函数。 2.2 使用 启动单个goroutine 启动goroutine的方式非常简单只需要在调用的函数(普通函数和匿名函数)前面加一个go关键字。 使用协程 启动多个协程 我们发现下面的打印不是按顺序打印的这是因为协程是并发运行的调度是随机的。 注意如果主协程退出了其它子协程会不论在不在运行会直接退出。 2.3 goroutine与线程 可增长的栈 OS线程(操作系统的线程)一般由固定的栈内存(通常2MB)一个goroutine的栈在其生命周期开始只有很小的栈(典型情况下2KB)goroutine的栈不是固定的它可以按需增大或缩小goroutine的栈大小限制可以达到1GB虽然极少会用到这么大。所以在Go语言中一次创建十万左右的goroutine也是可以的。 goroutine调度 GPM是Go语言运行时(runtime)层面的实现是go语言自己实现的一套调度系统。区别于操作系统调度OS线程。 G很好理解就是个goroutine的里面除了存放本goroutine信息外还有与所在P的绑定等信息。P管理着一组goroutine队列P里面会存储当前goroutine运行的上下文环境(函数指针堆栈信息及地址边界)P会对自己管理的goroutine队列做一些调度(比如把占用CPU时间较长的goroutine暂停运行后续的goroutine等)当自己的队列消费完就去全局队列里面取如果全局队列也消费完了会去其它P的队列里抢任务。M(machine)是Go运行时(runtime)对操作系统内核线程的虚拟M与内核线程一般是一一对应的关系一个goroutine最终是要放到M上执行的。 P与M一般也是一一对应。他们的关系P管理着一组挂载在M上运行。当一个G长久阻塞在一个M上时runtime会建立一个M阻塞G所在的P会把其它的G挂载在新的M上当旧的G阻塞完成或认为其已经死掉回收旧的M。 P的个数是通过runtime.GOMAXPROCS设定(最大256)Go1.5版本之后默认为物理线程数。在并发量大的时候会增加一些P和M但不会太多切换太频繁的话得不偿失。 单从线程调度讲Go语言相比起其它语言的优势在于OS线程是由OS内核调度的goroutine则是由Go运行时(runtime)自己的调度器调度的这个调度器使用一个称为m:n调度技术(复用/调度m个goroutine到n个OS线程)。其一大特点是goroutine的调度是在用户态下完成的不涉及内核态与用户态之间的频繁切换包括内存的分配与释放都是在用户态维护着一个大的内存池不直接调用系统的malloc函数(除非内存池需要改变)成本比调度OS线程低的多。另外一方面充分利用了多核的硬件资源近似的把若干goroutine均分在物理线程上再加上本身的goroutine的超轻量以上种种保证了go调度方面的性能。 总结 Go语言中的操作系统线程与goroutine之间的关系 一个操作系统线程对应用户态多个goroutinego语言可以同时使用多个操作系统线程goroutine和OS线程是多对多的关系即m:n  三.runtime包 runtime.Gosched() 让出CPU时间片重新等待安排任务。 package mainimport (fmtruntime )func main() {go func(s string) {for i : 0; i 2; i {fmt.Println(s)}}(world)//主协程for i : 0; i 2; i {runtime.Gosched() //切以下再次分配任务fmt.Println(hello )} } runtime.Goexit() 退出当前协程。 runtime.GOMAXPROCS Go运行时的调度器使用GOMAXPROCS参数来确定需要使用多少个OS线程同时执行Go代码。默认值是机器上的CPU核心数。比如在一个8核心的机器上调度器会把Go代码同时调度到8个OS线程上。(GOMAXPROCS是m:n调度中的n) Go语言可以通过runtime.GOMAXPROCS()函数设置当前程序并发时占用的CPU逻辑核心数。 Go1.5版本之前默认使用的是单核心执行。Go1.5版本之后默认使用全部的CPU逻辑核心。 我们可以通过将任务分配到不同的CPU逻辑核心上实现并行的效果在这里举个例子 下面的例子是只是用CPU的一个核心先完成一个任务再完成一个任务。 设置逻辑核心为2此时两个任务并行执行。
http://www.dnsts.com.cn/news/59667.html

相关文章:

  • 广东哪里有网站建设腾讯云市场 wordpress
  • 3d建模素材网站个人网页制作在线
  • 模型网站大全免费长宁网站推广公司
  • 做样子的网站平面设计培训班学费
  • i57500网站开发企业官网运营
  • 网站维护公司广州环保企业网站建设现状
  • jsp网站开发 英文电商网站开发实例
  • 宜昌网站开发公司建设行政主管部门相关网站
  • 微信网站开发系统推广广告软件
  • 网站购买哪些网站做外贸
  • 建设银行培训网站怎么做qq代刷网站
  • 济南手机网站建设专业定制网站手机版二维码怎么做
  • 网站统计帮哪个好什么企业适合做网站
  • 假冒彩票网站开发类似淘宝的网站怎么做的
  • 宝安区建设工程交易服务中心清理优化大师
  • 鹤壁做网站的网络公司app软件大全
  • 网站怎么适配移动端网站这么设置微信支付宝
  • 山东聊城建设局网站H5响应式网站示例
  • iis6.1的网站建设及权限设置网站开发技术文档格式
  • 做字素的网站如何免费建网站
  • 网站建设的制度企业网站建设方案
  • 网站关键字推广坪山网站的建设
  • 网站运行环境配置网站建设提供资料
  • 建立外贸网站阿里云网站备案登陆
  • 河南省内 在哪个网站做商检表微信公众号发布wordpress
  • 怎样给网站换空间安徽省建设工程信息网招标公告
  • 通化 网站建设微信官网网站
  • 招聘网站源码下载wordpress qqoq主题
  • 江苏建设厅施工员证报名网站小程序开发和app开发差别
  • 网站开发的公司电话杭州做网站的公司有哪些