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之路——进程
操作系统背景知识 顾名思义,进程即正在执行的一个过程.进程是对正在运行程序的一个抽象. 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一.操作系统的其 ...
随机推荐
- 菜刀连接webshell
中国菜刀,一个非常好用而又强大的webshell,它可不是用来切菜的做饭的道具哦,是一款专业的网站管理软件,大小只有300多KB,真是小巧实用啊!不过被不法分子利用到,就是一个黑站的利器了.我记得以前 ...
- Django开发问题及解决方法汇总
1. manage.py@MxOnline > makemigrations users manage.py@MxOnline > migrate users 2. 操作django的ad ...
- php调java接口
1.下载二进制的 JavaBridge.jar包.java/Java.inc库文件,下载地址:http://php-java-bridge.sourceforge.net/pjb/download.p ...
- 递归生成treeview树形节点(没有用递归函数之后会有补充,这里只用系统的内置方法去生成)
using System;using System.Collections.Generic;using System.ComponentModel;using System.IO;using Syst ...
- APP自动化测试怎么测?
一般来说工具还有技术都是千篇一律 测试测到最后还是业务能力...
- 抽象 abstract 和 接口 interface。 java 的 堆 和 栈。 参数传递(基本类型和普通对象的区别)
package com.test; import com.test.Pro; //protected 修饰的成员只能在本包中和 继承该类的方法中使用 public abstract class Tes ...
- SQLInjection 靶场配置
对于渗透,太小型的网站没有太大价值,而大型网站(比如各种电商平台)对于代码审计往往非常严格,新手基本找不到漏洞,而一些比较容易搞掉的站点(政府.gov.各种教育网站.edu或者很多商业中型站点)渗透又 ...
- 2018.09.24 bzoj1486: [HNOI2009]最小圈(01分数规划+spfa判负环)
传送门 答案只保留了6位小数WA了两次233. 这就是一个简单的01分数规划. 直接二分答案,根据图中有没有负环存在进行调整. 注意二分边界. 另外dfs版spfa判负环真心快很多. 代码: #inc ...
- 2018.09.09 UVa10529 - Dumb Bones(期望dp)
传送门 期望dp好题. f[i]表示摆放i个的最小花费,于是f[i]可以从f[j]与f[i-j+1]转移过来了. 代码: #include<bits/stdc++.h> #define N ...
- MATLAB矩阵的一些用法
1.怎样去提取和修改矩阵中的一个元素. (1)创建一个矩阵 >> A=[1,2,3,4;5,6,7,8;9,10,11,12;13,14,15,16]A = 1 2 ...