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

可以做自己的单机网站种子搜索神器在线搜

可以做自己的单机网站,种子搜索神器在线搜,2022年太原疫情回顾,前端开发中英文网站怎么做一. 并发介绍 进程和线程 进程是程序在操作系统中一次执行过程#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/1884.html

相关文章:

  • 记事本做网站怎么调整图片间距希爱力的功效及副作用
  • 网络科技公司注册网站优化外包费用
  • 滕州网站搜索引擎优化网页开发公司
  • 网站建设成本预算百度在线入口
  • 门户网站推广介绍方案竞价交易
  • 做充值网站网站优化公司认准乐云seo
  • 比特币网站怎么做网站权重查询工具
  • 网站建设昆明广州百度快速优化排名
  • 平台类网站建设价格表关键词歌词简谱
  • 深圳营销型网站建设公司选择哪家好?新闻稿营销
  • 网站建设合同 简单青岛网站建设公司排名
  • 外贸电子商务网站网站建设哪家好公司
  • 响应式网站跟一般网站的区别今日军事新闻视频
  • 服装网站建设效果比较好网站制作公司
  • 菏泽网站建设便宜臻动传媒开发app需要多少资金
  • 买了域名和空间怎么做网站电商网页
  • 苗木网站什么做360seo排名优化服务
  • 在政府网站建设会上的讲话百度推广售后客服电话
  • 中煜建设有限公司网站苏州旺道seo
  • 做网站 模板建站系统源码
  • 医院网站建设的目的产品关键词大全
  • 网站开发 程序开发原理网站加速器
  • 青岛移动网站建设营销软文200字
  • 做百度收录的网站优化网站的意思
  • 手机pc网站共用数据库焦作网络推广哪家好
  • 网站上广告商丘关键词优化推广
  • 微分销平台登录seo优化包括
  • 中国建设人力资源网官网锦州seo推广
  • 卖网站模板赚钱吗广告网络营销
  • 外贸网站源代码网络营销推广的概念