
go语言100个典型错误及如何避免
文章平均质量分 86
蜗牛慢行
这个作者很懒,什么都没留下…
展开
-
59. 不理解负载类型对并发的影响
然而,由于 Go 调度器的主要目标之一是优化资源(在这里是 goroutine 的分配),鉴于工作负载的性质,我们应该最终会处于这样一种场景中。在 CPU 密集型工作负载的情况下,如果核心数量是 4 个,但我们只有 3 个线程,那么我们应该启动 3 个 goroutine,而不是 4 个。这种情况下,已然达到最优解了,四个 goroutine 在独立的线程中运行,并且这些线程在独立的CPU上。然而,正如我们所看到的,在 CPU 密集型工作负载的情况下,我们可以通过有利的条件来实现它:基于。原创 2024-07-28 16:54:58 · 368 阅读 · 0 评论 -
58. 不理解竞态问题
竞态问题可能程序员面临的最困难和最隐蔽的错误之一。作为 Go 开发者,必须理解数据竞争和竞态条件等关键方面,包括它们可能产生的影响以及如何避免。接下来将首先讨论数据竞争与竞态条件的区别,然后研究 Go 内存模型及其重要性。原创 2024-07-21 12:48:02 · 699 阅读 · 0 评论 -
57. 关于channels和mutexes迷惑
关于并发 goroutine,还有一种情况是,我们希望将资源的所有权从一个步骤(G1 和 G2)转移到另一个步骤(G3);因为在go语言中推荐通过交互来共享内存,所以经常犯的一个错误是,无论什么什么场景,都选择使用channels。知道goroutine是并行的还是并发是很重的,因为一般情况下,并行。需要访问或修改共享资源(如切片)时,需要进行同步,而这种同步是通过互斥锁实现,通道类型(包括有缓冲的通道)无法实现这种同步,所以一般来说,并行。channel是在并发线程中接收和发送数据的一种交互机制。原创 2024-07-21 10:12:41 · 308 阅读 · 0 评论 -
56. 并发并一定更快
通常来说,大多数程序员认为并发一定是快于单线程,这是一个错误的认知。一个解决方案的性能怎么样,取决于很多因素,如:整个架构是否拆分为并发的执行单元以及各执行单元间资源竞争如何。在操作系统级别可执行的最小单元是「线程」。如果一个进程想同时执行多个操作,那么就需要启动多个线程,这些线程可以是并发亦或是并行。操作系统负责以最佳方式调度线程,保证所有线程都能消耗 CPU ,不会长时间处于饥饿状态,工作负载尽可能均匀地分布在不同的 CPU 内核之间。CPU可以执行多个不同的线程。原创 2024-07-14 21:50:47 · 854 阅读 · 0 评论 -
并发与并行的混淆(错误55)
并行并行是多个任务或操作在同一时刻实实在在地同时执行的工作方式。资源独立性:并行处理中的每个任务都拥有独立的资源分配,如在我们所举的咖啡店例子中,新增的店员和新增的咖啡机都有各自独立的工作空间和设备资源,彼此互不干扰、相互独立地执行任务。同步性:多个并行的任务能够在相同的时间点上同步推进,共同完成工作。每个任务都在同一时刻按照各自的流程和步骤进行操作,彼此之间不存在时间上的先后依赖关系。高效性:由于多个任务能够同时开展,所以在单位时间内完成的工作量大大增加,工作效率显著提升。原创 2024-07-14 00:23:18 · 1047 阅读 · 0 评论