php实验报告企业网站开发做网站优化用什么软件

news/2025/10/3 12:40:46/文章来源:
php实验报告企业网站开发,做网站优化用什么软件,学校网站制作方案,个人网站没人访问Golang 是一门号称从语言层面支持并发的编程语言#xff0c;支持并发是 Golang 一个非常重要的特性。在上一篇文章《44 | 协程#xff1a;更轻量级的线程》中我们介绍过#xff0c;Golang 支持协程#xff0c;协程可以类比 Java 中的线程#xff0c;解决并发问题的难点就在…Golang 是一门号称从语言层面支持并发的编程语言支持并发是 Golang 一个非常重要的特性。在上一篇文章《44 | 协程更轻量级的线程》中我们介绍过Golang 支持协程协程可以类比 Java 中的线程解决并发问题的难点就在于线程协程之间的协作。 那 Golang 是如何解决协作问题的呢 总的来说Golang 提供了两种不同的方案一种方案支持协程之间以共享内存的方式通信Golang 提供了管程和原子类来对协程进行同步控制这个方案与 Java 语言类似另一种方案支持协程之间以消息传递Message-Passing的方式通信本质上是要避免共享Golang 的这个方案是基于 CSPCommunicating Sequential Processes模型实现的。Golang 比较推荐的方案是后者。 什么是 CSP 模型 我们在《42 | Actor 模型面向对象原生的并发模型》中介绍了 Actor 模型Actor 模型中 Actor 之间就是不能共享内存的彼此之间通信只能依靠消息传递的方式。Golang 实现的 CSP 模型和 Actor 模型看上去非常相似Golang 程序员中有句格言“不要以共享内存方式通信要以通信方式共享内存Don’t communicate by sharing memory, share memory by communicating。”虽然 Golang 中协程之间也能够以共享内存的方式通信但是并不推荐而推荐的以通信的方式共享内存实际上指的就是协程之间以消息传递方式来通信。 下面我们先结合一个简单的示例看看 Golang 中协程之间是如何以消息传递的方式实现通信的。我们示例的目标是打印从 1 累加到 100 亿的结果如果使用单个协程来计算大概需要 4 秒多的时间。单个协程只能用到 CPU 中的一个核为了提高计算性能我们可以用多个协程来并行计算这样就能发挥多核的优势了。 在下面的示例代码中我们用了 4 个子协程来并行执行这 4 个子协程分别计算[1, 25 亿]、(25 亿, 50 亿]、(50 亿, 75 亿]、(75 亿, 100 亿]最后再在主协程中汇总 4 个子协程的计算结果。主协程要汇总 4 个子协程的计算结果势必要和 4 个子协程之间通信Golang 中协程之间通信推荐的是使用 channelchannel 你可以形象地理解为现实世界里的管道。另外calc() 方法的返回值是一个只能接收数据的 channel ch它创建的子协程会把计算结果发送到这个 ch 中而主协程也会将这个计算结果通过 ch 读取出来。 import (fmttime ) func main() {// 变量声明var result, i uint64// 单个协程执行累加操作start : time.Now()for i 1; i 10000000000; i {result i}// 统计计算耗时elapsed : time.Since(start)fmt.Printf(执行消耗的时间为:, elapsed)fmt.Println(, result:, result)// 4个协程共同执行累加操作start time.Now()ch1 : calc(1, 2500000000)ch2 : calc(2500000001, 5000000000)ch3 : calc(5000000001, 7500000000)ch4 : calc(7500000001, 10000000000)// 汇总4个协程的累加结果result -ch1 -ch2 -ch3 -ch4// 统计计算耗时elapsed time.Since(start)fmt.Printf(执行消耗的时间为:, elapsed)fmt.Println(, result:, result) } // 在协程中异步执行累加操作累加结果通过channel传递 func calc(from uint64, to uint64) -chan uint64 {// channel用于协程间的通信ch : make(chan uint64)// 在协程中执行累加操作go func() {result : fromfor i : from 1; i to; i {result i}// 将结果写入channelch - result}()// 返回结果是用于通信的channelreturn ch }CSP 模型与生产者 - 消费者模式 你可以简单地把 Golang 实现的 CSP 模型类比为生产者 - 消费者模式而 channel 可以类比为生产者 - 消费者模式中的阻塞队列。不过需要注意的是 Golang 中 channel 的容量可以是 0容量为 0 的 channel 在 Golang 中被称为无缓冲的 channel容量大于 0 的则被称为有缓冲的 channel。 无缓冲的 channel 类似于 Java 中提供的 SynchronousQueue主要用途是在两个协程之间做数据交换。比如上面累加器的示例代码中calc() 方法内部创建的 channel 就是无缓冲的 channel。 而创建一个有缓冲的 channel 也很简单在下面的示例代码中我们创建了一个容量为 4 的 channel同时创建了 4 个协程作为生产者、4 个协程作为消费者。 // 创建一个容量为4的channel ch : make(chan int, 4) // 创建4个协程作为生产者 for i : 0; i 4; i {go func() {ch - 7}() } // 创建4个协程作为消费者 for i : 0; i 4; i {go func() {o : -chfmt.Println(received:, o)}() }Golang 中的 channel 是语言层面支持的所以可以使用一个左向箭头-来完成向 channel 发送数据和读取数据的任务使用上还是比较简单的。Golang 中的 channel 是支持双向传输的所谓双向传输指的是一个协程既可以通过它发送数据也可以通过它接收数据。 不仅如此Golang 中还可以将一个双向的 channel 变成一个单向的 channel在累加器的例子中calc() 方法中创建了一个双向 channel但是返回的就是一个只能接收数据的单向 channel所以主协程中只能通过它接收数据而不能通过它发送数据如果试图通过它发送数据编译器会提示错误。对比之下双向变单向的功能如果以 SDK 方式实现还是很困难的。 CSP 模型与 Actor 模型的区别 同样是以消息传递的方式来避免共享那 Golang 实现的 CSP 模型和 Actor 模型有什么区别呢 第一个最明显的区别就是Actor 模型中没有 channel。虽然 Actor 模型中的 mailbox 和 channel 非常像看上去都像个 FIFO 队列但是区别还是很大的。Actor 模型中的 mailbox 对于程序员来说是“透明”的mailbox 明确归属于一个特定的 Actor是 Actor 模型中的内部机制而且 Actor 之间是可以直接通信的不需要通信中介。但 CSP 模型中的 channel 就不一样了它对于程序员来说是“可见”的是通信的中介传递的消息都是直接发送到 channel 中的。 第二个区别是Actor 模型中发送消息是非阻塞的而 CSP 模型中是阻塞的。Golang 实现的 CSP 模型channel 是一个阻塞队列当阻塞队列已满的时候向 channel 中发送数据会导致发送消息的协程阻塞。 第三个区别则是关于消息送达的。在《42 | Actor 模型面向对象原生的并发模型》这篇文章中我们介绍过 Actor 模型理论上不保证消息百分百送达而在 Golang 实现的 CSP 模型中是能保证消息百分百送达的。不过这种百分百送达也是有代价的那就是有可能会导致死锁。 比如下面这段代码就存在死锁问题在主协程中我们创建了一个无缓冲的 channel ch然后从 ch 中接收数据此时主协程阻塞main() 方法中的主协程阻塞整个应用就阻塞了。这就是 Golang 中最简单的一种死锁。 func main() {// 创建一个无缓冲的channel ch : make(chan int)// 主协程会阻塞在此处发生死锁- ch }总结 Golang 中虽然也支持传统的共享内存的协程间通信方式但是推荐的还是使用 CSP 模型以通信的方式共享内存。 Golang 中实现的 CSP 模型功能上还是很丰富的例如支持 select 语句select 语句类似于网络编程里的多路复用函数 select()只要有一个 channel 能够发送成功或者接收到数据就可以跳出阻塞状态。鉴于篇幅原因我就点到这里不详细介绍那么多了。 CSP 模型是托尼·霍尔Tony Hoare在 1978 年提出的不过这个模型这些年一直都在发展其理论远比 Golang 的实现复杂得多如果你感兴趣可以参考霍尔写的Communicating Sequential Processes这本电子书。另外霍尔在并发领域还有一项重要成就那就是提出了霍尔管程模型这个你应该很熟悉了Java 领域解决并发问题的理论基础就是它。 Java 领域可以借助第三方的类库JCSP来支持 CSP 模型相比 Golang 的实现JCSP 更接近理论模型如果你感兴趣可以下载学习。不过需要注意的是JCSP 并没有经过广泛的生产环境检验所以并不建议你在生产环境中使用。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/925897.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

2025粒度仪厂家 TOP 企业品牌推荐排行榜,粒度分析仪,喷雾,激光,纳米,在线,图像粒形,干湿两用粒度仪公司推荐

引言在颗粒表征技术愈发关键的当下,粒度仪已成为金属粉、非金属矿粉、医药、化工等多个领域不可或缺的检测设备。然而,市场上粒度仪品牌与产品层出不穷,质量与性能参差不齐,给企业和科研机构的选购带来了诸多困扰。…

详细介绍:【读书笔记】《C陷阱与缺陷》第4章:连接问题解析 | 避开多文件编译的坑

详细介绍:【读书笔记】《C陷阱与缺陷》第4章:连接问题解析 | 避开多文件编译的坑pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; fon…

Kafka 安全SASL 认证全栈实战从 JAAS 到 Kerberos、PLAIN、SCRAM、OAUTH 与委托令牌 - 教程

Kafka 安全SASL 认证全栈实战从 JAAS 到 Kerberos、PLAIN、SCRAM、OAUTH 与委托令牌 - 教程2025-10-03 12:31 tlnshuju 阅读(0) 评论(0) 收藏 举报pre { white-space: pre !important; word-wrap: normal !importa…

glibc堆

堆的概述 在内存管理领域,glic通过brk和mmap两大系统调用,构建了一套高效的堆内存管理机制。层级化架构,包含分配区(Arena) 堆(Heap) 内存块(Chunk). 主Arena依赖brk系统调用实现内存分配,而子Arena通过mmap完…

幻影图片一键制作网站成武县建设局网站

1.控制同一语句的多次执行2.减少多次的数据转换3.杜绝不必要的子查询和连接表,子查询在执行计划一般解释成外连接,多余的连接表带来额外的开销。4.合并对同一表同一条件的多次UPDATE,比如 UPDATE EMPLOYEE SET FNAMEHAIWER WHERE EMP_ID VPA3…

完整教程:从 “T+1” 到 “秒级”:MySQL+Flink+Doris 构建实时数据分析全链路

完整教程:从 “T+1” 到 “秒级”:MySQL+Flink+Doris 构建实时数据分析全链路pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-f…

平均数

题目大意 平均数 给定长度为 \(n\) 的非负整数序列 \(a_1,a_2,\cdots,a_n\),问有多少个区间 \([l,r](1\le l\le r\le n)\) 满足 \(a_l,a_{l+1},\cdots,a_{r}\) 的平均数为给定非负整数 \(k\)。 思路 发现直接维护平均…

质数表

每个量级取前 50 个。 1e2 - 1e6 数表1e2 1e3 1e4 1e5 1e6101 1009 10007 100003 1000003103 1013 10009 100019 1000033107 1019 10037 100043 1000037109 1021 10039 100049 1000039113 1031 10061 100057 100008112…

dw网站制作的一般流程全国商务网站大全

题干: Eddy是个ACMer,他不仅喜欢做ACM题,而且对于Ranklist中每个人的ac数量也有一定的研究,他在无聊时经常在纸上把Ranklist上每个人的ac题目的数量摘录下来,然后从中选择一部分人(或者全部)按照ac的数量分成两组进行比较,他想使第一组中的最…

企业建设网站需要服务器吗网站制作的

需要使用 JIRA 的查找功能。 把需要移动的 Issue 先全部找到,然后选择 Tools 下面的所有 Issues 批量操作页面 在随后的页面中,将会出现批量操作的页面。 在这里,可以对需要进行批量操作的问题,进行全部选择。 然后单击下一步继…

青岛seo网站建设公司建个网站的费用

面向对象编程特征:抽象化,讲究对象,集成,封装,多态。 类:一类事物,苹果,梨,香蕉都是水果,都是一类。 类的特征:构造函数,字段属性和方…

从刷抖音说起:你每天都在 “用” 服务器,却可能不认识它 - 详解

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …

小作业 11

给定 \(a,b>0\),求 \(\dfrac{a}{a+2b}+\dfrac{b}{a+b}\) 的最小值。\[\dfrac{a}{a+2b}+\dfrac{b}{a+b}=\dfrac{a^2+2ab+2b^2}{a^2+3ab+2b^2} \]\[=1-\dfrac{ab}{a^2+3ab+2b^2}=1-\dfrac{1}{\frac{a}{b}+\frac{2b}{…

US$948 WOYO UC009 Ultrasonic Cutter for Cutting Plastic

WOYO UC009 Hobby Tool for Cutting PlasticWOYO UC009 Description:1.Oscillation Frequency: 39.5KHz Max. Output Power: 30W2. Intricate and accurate cutting with a light touch3. This ideal handpiece offer…

深入解析:【RabbitMQ】原理解析

深入解析:【RabbitMQ】原理解析pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco&qu…

win7 iis添加网站深圳做营销网站公司简介

随着经济的不断发展和生活水平的日益提高,节能环保已经成为全社会的责任和共识,分布式光伏电站作为清洁能源走进了千家万户。然而,在分布式光伏电站运行期间,面临监管困难、系统繁多、火灾隐患和运维不当等困难,该如何…

一次insert插入多条数据比insert循环插入数据效率高多少?

在MySQL中,‌一次插入多条数据的效率显著高于单条插入‌。实验数据显示,当插入30条数据时,批量插入速度比单条插入快近9倍。 效率差异原因‌数据库操作次数‌:批量插入减少数据库写操作和网络传输次数,而单条插入…

详细介绍:Java安全“幽灵”:深入剖析内存马的原理、注入与查杀

详细介绍:Java安全“幽灵”:深入剖析内存马的原理、注入与查杀pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "C…

2025波形护栏厂家 TOP 企业品牌推荐排行榜,山东波形护栏防撞,三波,二波,双波,喷塑,公路,热浸锌,浸塑,镀锌波形护栏公司推荐!

在道路交通建设快速推进的当下,波形护栏作为保障道路安全的核心设施,其质量与性能直接关系到公众出行安全。然而当前市场中,波形护栏厂家数量众多,行业呈现出良莠不齐的发展态势。部分小型厂商缺乏核心生产技术,采…

【Linux】进程控制(一) 进程创建、终止与等待概念与实战讲解 - 教程

pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas", "Monaco", "Courier New", …