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

中国网站制作 第一个网络会议系统解决方案

中国网站制作 第一个,网络会议系统解决方案,四川省建设厅职称网站,淘宝客可以做返利网站吗并发 什么是并发,也就是我们常说的多线程,多个程序同时执行。 并发的基础 线程和进程 进程 进程是操作系统中一个重要的概念,指的是一个正在运行的程序的实例。它包含程序代码、当前活动的状态、变量、程序计数器和内存等资源。进程是系…

并发

什么是并发,也就是我们常说的多线程,多个程序同时执行。

并发的基础

线程和进程

进程

进程是操作系统中一个重要的概念,指的是一个正在运行的程序的实例。它包含程序代码、当前活动的状态、变量、程序计数器和内存等资源。进程是系统进行资源分配和调度的基本单位。

每个进程都有自己的地址空间、数据、堆栈以及其他用于管理其运行的资源。进程之间相互独立,通常通过进程间通信(IPC)来交换数据。

简而言之,进程可以被视为一个正在执行的程序,管理着程序的执行环境和资源。

线程

线程是进程中的一个执行单位,是操作系统中的基本单位,应该进程可以有多个线程,他们共享一个进程的资源,比如内存,但是每个线程可以说是相对独立的。

在java和python中有很多方法实现多线程,比如java中的Thread类和Runnable接口,并且可以通过线程池来管理线程

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;public class Main {public static void main(String[] args) {ExecutorService executor = Executors.newFixedThreadPool(2);for (int i = 0; i < 5; i++) {executor.submit(new MyRunnable());}executor.shutdown(); // 关闭线程池}
}

协程(goroutine)

而在go语言中,好像并没有线程这一概念,只有协程,也就是goroutine。相比于线程来说,协程更加轻便

在go中启动一个goroutine只需要使用关键词go即可,相比于java更加轻便简单

import (  "fmt"  
)  func main() {  go fmt.Println("goood")  fmt.Println("booy")  
}

可以发现先输出的是booy,然后才是goood,因为go关键词启动的goroutine不影响main goroutine的执行

管道(chnnel)

在go语言中管道是用于在goroutine之间进行通讯的机制,它允许在不同的goroutine之间安全的传递数据

创建管道

它也可以使用make函数创建管道

ch :=make(chan int)

其中chan关键字就表示channel类型,和之前的map和string[]差不多,chan也是一个集合类型。

接收和发送数据

chan的操作只有俩种 接收和发送

接收: 获取chan中的值,<-chan
发送: 向chan发送值,chan<-

package mainimport ("fmt"
)func main() {ch := make(chan int)go func() {ch <- 42 // 发送数据到管道}()  //执行这个函数的调用value := <-ch // 从管道接收数据fmt.Println(value) // 输出: 42
}
有缓冲管道与无缓冲管道

在go语言中管道分为有缓冲管道和无缓冲管道,他们在数据传输的方式和行为上有一些不同。

无缓冲管道

无缓冲管道就是在定义时不指定容器的管道,上面的定义就是无缓冲管道。

特点:发送和接收操作是同步的,发送方只有到接收方准备好接收数据时才会运行,可以确保数据在发送和接收直接有严格同步

上面例子定义的就是无缓冲管道

有缓冲管道

同理,有缓冲管道就是在定义时指定了容器的管道

特点:发送和接收操作是异步的,只要管道没满,发送方就不会阻塞,只要管道没空,接收方也不会阻塞。

ch := make(chan int, 2) // 有缓冲管道,容量为 2ch <- 1 // 发送数据,管道有空间,不阻塞
ch <- 2 // 发送数据,管道仍有空间,不阻塞// 此时如果再发送数据,发送方会阻塞,直到有空间可用
// ch <- 3 // 这会导致阻塞fmt.Println(<-ch) // 接收数据,输出: 1
fmt.Println(<-ch) // 接收数据,输出: 2

为什么先返回1再返回2,接收操作从头部接收而发送操作是从尾部发送,所以顺序不变

关闭管道

当不需要使用管道时可以关闭。

close(ch)

当管道关闭后,无法向里面发送数据,但是还是可以向外发送

单向管道

单项管道是指只能用于发送或接收数据的一种管道。可以通过类型声明来创建单向管道,从而限制其用法,提高代码的安全性和可读性

声明

// 创建一个可以发送的管道
chSend := make(chan<- int)// 创建一个可以接收的管道
chReceive := make(<-chan int)

如何使用

package mainimport ("fmt"
)func sendData(ch chan<- int) {for i := 0; i < 5; i++ {ch <- i // 只能发送数据}close(ch) // 关闭管道
}func receiveData(ch <-chan int) {for value := range ch {fmt.Println(value) // 只能接收数据}
}func main() {ch := make(chan int) // 创建一个双向管道go sendData(ch)     // 启动发送数据的协程receiveData(ch)     // 接收数据
}

可以看到发送的数据被接受并输出并且顺序不变。

在这里插入图片描述

http://www.yayakq.cn/news/338965/

相关文章:

  • 网站开发 报刊公司付的网站费怎么做分录
  • 网站设计 网络推广的服务内容wordpress广告牌
  • 低价网站建设浩森宇特百度免费建网站
  • 济南网站建设和优化大庆油田建设集团网站
  • 网站建设实习内容招代理的网站要怎么做
  • 国内响应式网站建设中济建设有限公司网站
  • 免备案php网站空间网页游戏网页游戏
  • 做设计找参考的设计网站有那些哈尔滨企业建站网站开发
  • 做网站的服务器多少钱帮人建网站价格赚钱吗
  • 宁波pc营销型网站制作seo排名整站优化
  • 品牌广告公司网站建设seo用什么论坛引流
  • 荆门网站seo东莞网站建设开发
  • 云端做效果图的网站做网站最专业的公司有哪些
  • 柳州房地产网站建设做单页免费模板网站
  • 珠海网站推广排名烟台网站建设多少钱
  • 建立网站目录结构的意义四川星星建设集团有限公司网站
  • 苏州科建设交通学院网站富蕴县建设局网站
  • 二手交易网站开发方式外贸招聘网站
  • 网站后台根据前端做吗网站服务器租用和托管
  • 关于 公司网站建设的通知怎么用wordpress建立本地网站
  • 长沙品牌网站建设实力强网站建设服务合同交印花税吗
  • 电脑如何做网站空间中国建筑信息平台
  • 通信建设工程项目经理查询网站中国风网页设计欣赏
  • 做机器人的网站无锡百度网站推广
  • 信阳做网站推广信阳网站建设鞍山玉佛苑官网
  • 做网站系统公司seo是什么职位
  • 网站做竞价经常会被攻击吗哪些公司的网站做的漂亮
  • 推上网站深圳制作网站开发费用
  • 网站的主机空间是wordpress 4.7.3 乱码
  • 电商类网站有几个主流程百度统计wordpress