线程及依赖关系

51 阅读3分钟

线程可以包括多个协程,线程是内核级,协程是用户级,我们可以对协程进行控制,来提高并行性,锁机制和同步机制go语言也包括,和操作系统理论差不多。 对于groutine中的go我们可以理解创建一个协程并且在这个协程之上执行这行代码,从而实现并发,注意go是非阻塞,即主函数执行后立即返回结束,而不等待go的协程,对于并发和并行,我所学的操作系统有如下定义 并发指在一个时间间隔发生多个事件,而并行指在同一时刻发生多个时间。 通道:创建 c :=make(chan datatype)先设datetype为string 则通道发送消息为 c<- “hello” 接受为 msg:=<-c 缓冲通道:创建 c:=make(chan datatype,len)其中len为长度 关闭通道close(通道名)。 对于缓冲通道,缓冲通道可以储存更多的消息,一定程度上当发送信息是通道还有信息不被接收而导致麻烦,相当于一个现场制作的冰淇淋的小贩和有冰淇淋车的小贩,肯定是后者更加轻松。 当通道做函数参数是时 如果类型为<-chan 表示只读,chan<-是只写,没有指定时表示可读可写。 select类似于swich 对于先返回的通道执行,收到消息后其他协程信息会被拒绝。 stop类似于break 表示退出,是被迫的,一般stop与select连用,就像C语言中无限循环加上break,与close不同

软件测试:软件测试十分重要,可以让我们未雨绸缪,尽量避免损失,其中覆盖率表示代码覆盖率,就是已经执行过的代码量(看成在总代码的并集)/总代码量,类似语句覆盖,但是一般覆盖率为百分之50到60。其中单元测试覆盖最广,成本最低, mock测试:依赖属性有幂等和稳定,前者表示对相同处理结果都一样,后者表示对于不同环境的稳定运行。文件测试可以用打桩(mock),即不再依赖本地文件,防止被修改后无法使用。 基准测试表示对代码能力进行评估,即内存和运行时间,就像我们在leetcode刷题时系统评估我们代码内存和时间性能超过多少用户

接着是项目实践:首先是需求分析,需求分析十分重要,就像考试时审题,就算你写的在有理有据、逻辑正确,如果不按照题目要求来,那也得不到高分,使用需求分析十分重要。 接着是分层结构,有数据、逻辑和视图层。他们的关系是逐步依赖,数据层为最底层,主要是文件和代码,而逻辑层和视图层是建立在数据层之上的