Golang 实现守护主进程
package main import (
"fmt"
"runtime"
"sync"
"time"
) func test_goroutine() {
fmt.Println("函数被执行了*************************")
} func main() { // 测试多核并行化
// 在执一些昂贵的计算任务时,如果希望使用服务器的多核特性来尽量将任务实现并行化,从而达到降低总计算时间的目的
// 当前Golang版本并不能智能地发现和利用多核优势,如果不进行特殊声明,实际上所有的goroutine都运行在一个CPU核心上,
// 当一个goroutine得到时间片执行的时候,其他goroutine都会处于等待状态.
// 在Golang升级到默认支持多个CPU之前,我们可以先通过设置环境变量GOMAXPROCS的值, 或者在代码中启动goroutine之前
// 先调用相应的方法设置使用多少个CPU核心 // 获取cpu核心数
num_cpu := runtime.NumCPU()
// 设置使用的cpu的核心数
runtime.GOMAXPROCS(num_cpu) // 使用sync包实现
var wg sync.WaitGroup // 获取执行任务前的时间戳
start_time := time.Now().Unix() for i:=0; i<=3200000; i++{ wg.Add(1) //添加WaitGroup计数器 go func() { defer wg.Done() //defer标记当前函数作用域执行结束后 释放一个计数器,必须有这一步操作 fmt.Println("函数被执行了*************************")
}()
} wg.Wait() //阻塞,直到WaitGroup中的计数器为0 // 获取执行完成任务后的时间戳
end_time := time.Now().Unix()
fmt.Println(end_time-start_time) // 测试发现当进行简单的计算时,使用多核心和使用单核心执行时间上并没有出现差距, 资源的分配会出现时间损耗
// 简单的计算不建议使用多核cpu进行高并发, 当进行昂贵复杂的计算最好经过充分的测试, 使用合适的核心数进行并发执行任务
}
Golang 实现守护主进程的更多相关文章
- 写了一年golang,来聊聊进程、线程与协程
本文已收录 https://github.com/lkxiaolou/lkxiaolou 欢迎star. 进程 在早期的单任务计算机中,用户一次只能提交一个作业,独享系统的全部资源,同时也只能干一件事 ...
- Golang防止多个进程重复执行
创建锁文件 lockFile := "./lock.pid" lock, err := os.Create(lockFile) if err != nil { log.Fatal( ...
- 在Python程序中的进程操作,multiprocess.Process模块
在python程序中的进程操作 之前我们已经了解了很多进程相关的理论知识,了解进程是什么应该不再困难了,刚刚我们已经了解了,运行中的程序就是一个进程.所有的进程都是通过它的父进程来创建的.因此,运行起 ...
- python 使用多进程实现并发编程/使用queue进行进程间数据交换
import time import os import multiprocessing from multiprocessing import Queue, pool ""&qu ...
- python 全栈开发,Day38(在python程序中的进程操作,multiprocess.Process模块)
昨日内容回顾 操作系统纸带打孔计算机批处理 —— 磁带 联机 脱机多道操作系统 —— 极大的提高了CPU的利用率 在计算机中 可以有超过一个进程 进程遇到IO的时候 切换给另外的进程使用CPU 数据隔 ...
- day 27 Python中进程的操作
进程的创建和结束: multiprocess模块: multiprocess不是一个模块而是python中一个操作.管理进程的包 分为四个部分:创建进程部分,进程同步部分,进程池部分,进程之间数据共享 ...
- 0510进程 multiprocess模块
process模块是一个创建进程的模块,借助这个模块,就可以完成进程的创建. 创建模块 import os import time from multiprocessing import Proces ...
- 多并发编程基础 之进程 Process
原贴 https://www.cnblogs.com/gbq-dog/p/10299663.html 1. 进程的理论知识 1.1 操作系统的背景知识 顾名思义,进程即正在执行的一个过程.进程是对正 ...
- python之路——进程
操作系统背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其 ...
随机推荐
- LINQ to Entities 不支持 LINQ 表达式节点类型“ArrayIndex”。
错误原因: bool res1 = S_ROLE_MENU_PURVIEWCODE_Manage.Delete(c => c.MPC_CODE == strs[0]); linq不能写strs[ ...
- jquery正则判断字符串有几个逗号
var angelweb="我,你,ta,";var re=/[,,]/g;if(re.test(angelweb)){ var n=angelweb.match(re).leng ...
- PAT 1077 互评成绩计算(20)(代码+思路)
1077 互评成绩计算(20 分) 在浙大的计算机专业课中,经常有互评分组报告这个环节.一个组上台介绍自己的工作,其他组在台下为其表现评分.最后这个组的互评成绩是这样计算的:所有其他组的评分中,去掉一 ...
- pip常用操作指令
1.安装模块 pip install vitualenv pip install -r requirement.txt 2.查询模块信息 pip show pip 3.显示已经安装的模块 pip li ...
- 日期处理相关 - “Fri Dec 11 00:00:00 CST 2015”日期格式解析
1.后台处理方式: /* 精简版解析 - 推荐 */ String a= "Fri Dec 11 00:00:00 CST 2015"; Date d = new Date(a); ...
- IE浏览器调用jquery需要注意的小问题
今天在进行前端重构的时候发现了一个非常奇怪的浏览器兼容性问题,我想在网页上放一个JS的特效,于是下载了jquery-easyui,经过修改完成所需要的效果后,准备放入项目中,发现在IE浏览器中无法运行 ...
- PetaPoco与MySQL
随便写写的,PetaPoco与MySQL一起使用,在一个工控项目中充分使用节省不少开发时间,经历大半年的努力的项目接近完成,客户不认帐,开始需求合同就是个败笔,技术还是仅能解决技术问题而已! 上图上代 ...
- 网站SEO优化的方法
网站SEO优化的方法: 1.url静态化和规范化:url中都去掉了index.php这样的后缀网址形式,目的就是让网站的层级更浅,获得的权重更高 代码中可以使用urlrewrite重写. 2.域名30 ...
- 2018.10.22 bzoj1742: Grazing on the Run 边跑边吃草(区间dp)
传送门 区间dp入门题. 可以想到当前吃掉的草一定是一个区间(因为经过的草一定会吃掉). 然后最后一定会停在左端点或者右端点. f[i][j][0/1]f[i][j][0/1]f[i][j][0/1] ...
- 2018.07.17 CQOI2017 余数求和(整除分块)
洛谷传送门 bzoj传送门 这道题要用到学习莫比乌斯反演时掌握的整除分块算法,也就是对于一个数n" role="presentation" style="pos ...