虽然携程是Go语言中一个新的概念,嗯,但它本质上依然是属于多线程。超时机制是多线程中是一个非常重要的保障程序的鲁棒性的一个措施;错误是很难预估的,在多线程中更为显著,更容易出现难以预料的错误。 一个异常场景 在go语言中使用channel时需要小心,比如这个用法 i := <-ch 不出问题的话这个 ...
分类:
其他好文 时间:
2017-07-08 21:07:30
阅读次数:
150
这篇文章演示使用有缓冲的通道实现一个资源池,这个资源池可以管理在任意多个goroutine之间共享的资源,比如网络连接、数据库连接等,我们在数据库操作的时候,比较常见的就是数据连接池,也可以基于我们实现的资源池来实现。可以看出,资源池也是一种非常流畅性的模式,这种模..
分类:
编程语言 时间:
2017-06-29 00:42:19
阅读次数:
261
一、通过socket我们模拟请求网易 二、通过socket创建简单的服务端 通过xshell的telnet方法测试。 三、改进上面的代码,使用goroutine来处理用户的请求 四、连续的处理客户端发送的请求,根据cmd命令不同,返回不同数据。 ...
分类:
编程语言 时间:
2017-06-16 12:07:35
阅读次数:
198
上一篇我们讲的原子函数和互斥锁,都可以保证共享数据的读写。但是呢,它们还是有点复杂,而且影响性能。对此,Go又为我们提供了一种工具,这就是通道。所以在多个goroutine并发中,我们不仅可以通过原子函数和互斥锁保证对共享资源的安全访问,消除竞争的状态,还可以通过使用..
分类:
编程语言 时间:
2017-06-15 22:42:44
阅读次数:
207
我学golang,感觉前面基础语法部分都很快能学会,但是到了goroutine,channel等后面的部分就看不懂了,是不是我学这个之前还得学习其他什么知识啊?(我有C语言基础,对于C语言里面的指针,结构体,位运算等都有所了解) ... ...
分类:
其他好文 时间:
2017-06-10 13:48:21
阅读次数:
160
我感觉很多项目使用java或者c的多线程库+线程安全的queue数据结构基本上可以实现goroutine+channel开发能达到的需求,所以请问一下为什么说golang更适合并发服务端的开发呢?使用goroutine+channel和java多线程+queue队列的方式开发各有... ...
分类:
编程语言 时间:
2017-06-10 13:47:15
阅读次数:
186
竞争条件 竞争条件指的是程序在多个goroutine交叉执行操作时,没有给出正确的结果。竞争条件是很恶劣的一种场景,因为这种问题会一直潜伏在你的程序里,然后在非常少见的时候蹦出来,或许只是会在很大的负载时才会发生,又或许是会在使用了某一个编译器、某一种平台或者某一种架构的时候才会出现。这些使得竞争条 ...
分类:
其他好文 时间:
2017-05-27 20:09:09
阅读次数:
223
如果说goroutine是Go语音程序的并发体的话,那么channels它们之间的通信机制。一个channels是一个通信机制,它可以让一个goroutine通过它给另一个goroutine发送值信息。每个channel都有一个特殊的类型,也就是channels可发送数据的类型。一个可以发送int类 ...
分类:
其他好文 时间:
2017-05-25 20:47:34
阅读次数:
235
nodejs和golang都是支持协程的,从表现上来看,nodejs对于协程的支持在于async/await,golang对协程的支持在于goroutine。关于协程的话题,简单来说,可以看作是非抢占式的轻量级线程。 协程本身 一句话概括,上面提到了 "可以看作是非抢占式的轻量级线程"。 在多线程中 ...
分类:
Web程序 时间:
2017-05-23 23:42:18
阅读次数:
484
=Go 语言中的并发可以用两种方式实现: 第一种方式,支持顺序通信进程(communicating sequential processes),简称 CSP。CSP是一种现代的并发编程模型,在这种编程模型中值会在不同的运行实例(goroutine)中传递,尽管大多数情况下仍然是被限制在单一实例中。 ...
分类:
其他好文 时间:
2017-05-18 13:33:22
阅读次数:
156