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

福建中兴建设有限公司网站公司长沙建站

福建中兴建设有限公司网站,公司长沙建站,wordpress喜欢插件,温州seo网站管理简介 Go语言的调度器是一个非常强大的工具#xff0c;它可以帮助我们轻松地实现并发编程。调度器的工作原理是将多个协程映射到多个操作系统线程上#xff0c;并根据协程的状态来决定哪个协程应该在哪个线程上运行。 调度器有两种主要策略#xff1a; 协作式调度#xf…简介 Go语言的调度器是一个非常强大的工具它可以帮助我们轻松地实现并发编程。调度器的工作原理是将多个协程映射到多个操作系统线程上并根据协程的状态来决定哪个协程应该在哪个线程上运行。 调度器有两种主要策略 协作式调度 协作式调度是指协程主动放弃 CPU 时间片以便其他协程有机会运行。抢占式调度 抢占式调度是指调度器强制剥夺一个协程的 CPU 时间片以便另一个协程可以运行。 Go语言的调度器使用的是抢占式调度算法这意味着调度器可以随时中断一个协程的执行并将 CPU 时间片分配给另一个协程。 原理 Go语言的调度器是一个非常复杂的系统但它的基本原理可以归结为以下几点 协程 协程是 Go语言中的一种轻量级线程它与线程的主要区别在于协程是由用户态代码管理的而线程是由内核管理的。协程的创建和销毁都非常快速这使得它非常适合于编写并发程序。操作系统线程 操作系统线程是内核管理的执行单元它可以独立地执行代码。每个协程都必须运行在一个操作系统线程上。调度器 调度器负责将协程映射到操作系统线程上并决定哪个协程应该在哪个线程上运行。调度器会根据协程的状态来做出决定例如如果一个协程正在等待 I/O 操作那么调度器可能会将它从当前线程上移除并将它放到另一个线程上运行。 工作原理 Go语言的调度器使用一种称为 M:N 调度的算法来管理协程和操作系统线程之间的关系。M:N 调度算法是指 M 个协程可以映射到 N 个操作系统线程上其中 M 和 N 可以是任意正整数。 在 Go语言中M 的值通常等于处理器的数量而 N 的值可以根据需要进行调整。如果 N 的值大于 M 的值那么就会出现协程并发的现象。 性能优化 为了提高 Go语言程序的性能我们可以对调度器进行一些优化。以下是一些常见的优化技巧 减少协程的数量 过多的协程会增加调度器的负担从而降低程序的性能。因此我们应该尽量减少协程的数量。避免协程阻塞 协程阻塞是指协程在等待 I/O 操作或其他事件时无法继续执行。协程阻塞会导致调度器不得不将协程从当前线程上移除并将它放到另一个线程上运行这会增加调度器的负担。因此我们应该尽量避免协程阻塞。使用合理的 N 值 N 的值应该根据程序的实际情况进行调整。如果 N 的值太小那么就会出现协程并发的现象这会降低程序的性能。如果 N 的值太大那么就会浪费操作系统线程资源。 实战案例 在我们的一个工作项目中我们使用 Go语言的调度器来实现了一个并发文件下载程序。该程序可以同时下载多个文件并且可以自动重试下载失败的文件。 以下是该程序的部分代码 package mainimport (contextfmtionet/httpossync )// 定义一个协程安全的计数器 var wg sync.WaitGroup// 定义一个下载文件的函数 func downloadFile(ctx context.Context, url, filepath string) error {// 创建一个 HTTP 请求req, err : http.NewRequest(GET, url, nil)if err ! nil {return err}// 发送 HTTP 请求resp, err : http.DefaultClient.Do(req)if err ! nil {return err}defer resp.Body.Close()// 创建一个文件f, err : os.Create(filepath)if err ! nil {return err}defer f.Close()// 将 HTTP 响应体复制到文件中_, err io.Copy(f, resp.Body)if err ! nil {return err}return nil }// 定义一个主函数 func main() {// 创建一个 contextctx : context.Background()// 创建一个协程池pool : make(chan struct{}, 10)// 创建一个文件列表files : []string{https://example.com/file1.txt,https://example.com/file2.txt,https://example.com/file3.txt,}// 遍历文件列表for _, file : range files {// 将协程池中的一个令牌消耗掉pool - struct{}{}// 启动一个协程来下载文件go func(file string) {defer func() {// 将协程池中的一个令牌释放出来-pool}()// 增加计数器的值wg.Add(1)// 下载文件err : downloadFile(ctx, file, file/filepath.Base(file))if err ! nil {fmt.Println(err)}// 减少计数器的值wg.Done()}(file)}// 等待所有协程执行完毕wg.Wait() }
http://www.dnsts.com.cn/news/188242.html

相关文章:

  • 温州网站建设制作公司文创产品设计图片
  • 博物馆 网站 建设wordpress 微信发布
  • 微餐饮网站建设客户关系管理系统功能
  • 微企帮做网站wordpress copyfeed
  • 凡科网站建设好制作页培训
  • 江苏省建设厅网站是做水浒传有关的网站
  • 福田网站设计装修是全包划算还是半包划算
  • 网站设计济南深圳设计周2021时间
  • 用什么网站做海报sem是什么检测分析
  • 贵阳市小程序网站开发公司互联网创业项目哪家好平台
  • 杭州竞彩网站开发dede 网站改宽屏代码
  • 设计网站需要什么条件类似稿定设计的网站
  • 网站推广营销策划wordpress后台产品图标
  • 16年百度对泛解析网站的惩罚网架加工厂有招工的吗
  • 专做坏消息的网站wordpress多图片
  • 永嘉县建设局网站中堂镇仿做网站
  • 成都网站建设哪里好app拉新推广平台有哪些
  • 网站 备案查询专业做网带
  • 网站建设 设计那种连接线厂家wordpress 主题改多频道
  • python 快速搭建网站如何查看实时街景地图
  • wordpress只能下载一个文件下载seo关键词优化排名推广
  • 网站动态和静态的区别网页制作与网站建设宝典(第2版)
  • 凉山州住房和城乡建设局网站江阴市建设局官网站
  • 专门做冷门旅行的网站网站群建设的意义
  • 织梦建站教程下载国外有没有做物理小实验的网站
  • 开源网站下载免费公司主页网站
  • 学生网站建设的总结与评价欧卡乐网站建设
  • 旅游网站建设方案书范文建筑模板的规格
  • 一级a做爰片就线在看网站php wordpress 模版
  • 做初级会计实务题的网站godaddy空间建立wordpress