goroutine
文章平均质量分 78
矮木饭
I'm fine..
展开
-
go语言并发版爬虫
之前单任务版爬虫的架构是:传入一个种子(request)给engine,engine将url传给fetch,fetch将从url获取到的内容传给parse,parse解析出request和item,再将request传给engine队列.具体如下图:并发版爬虫基于原来的单任务版爬虫,在耗时长的部分使用goroutine,通过channel来传送数据首先,我们可以看到fetch的输出就是parse的输入,可以把fetch,parse以及engine的一部分合并成一个worker。原创 2022-10-01 22:06:39 · 524 阅读 · 0 评论 -
go语言的并发
根据之前的内容,可以写一个简单的生成器,生成channel,不断发送数据。使用生成器生成多个channel,从channel中接收数据,就是简单的并发上述就是一个简单的并发模式,但不是正经的并发。因为每次都要先从c1接收数据,再从c2接收数据,某一个channel没接收到还要等着,才能接收另一个channel要实现真正的并发,可以将从多个channel中接收的数据,只要接收到就发送给新的一个channel,main函数中只从这一个channel中接收数据。原创 2022-09-30 09:27:12 · 117 阅读 · 0 评论 -
go语言的select调度器的用法
select调度是使用了case来实现非阻塞式的通信,普通的通信是向channel中发送了数据,就必须有人接收,如果还没接收就再发送,就会阻塞住。而case语句的特点就是如果不满足后面语句这个条件,就会继续判断下一个case语句,所以将收发数据的语句放在case中,这样就避免了阻塞。原创 2022-09-29 15:54:34 · 111 阅读 · 0 评论 -
如何理解go语言的并发编程(一)
channel是go语言中比较重要的一个部分,体现了go语言通过通信来共享数据而不是通过共享数据来通信的思想。这篇问题只是简单介绍了channel的一些基本语法,以及简单的应用。但其实还有很多涉及到与其他调度器配合的内容没有在这里提到。比如并发模式,这里只是提到了顺序的向goroutine发送数据,如果同时由两个goroutine发送数据,想要谁发送的快就接受哪个,而不是接收完一个必须等待接收完另一个才能接收第一个。比如超时机制,如果超过一定时间没有接收到数据如何处理。原创 2022-09-15 13:49:58 · 180 阅读 · 0 评论