Docker:常用命令

# run一个ubuntu镜像 sudo docker run -ti highway:v1.0 bash # 退出ubuntu镜像命令行,而不将镜像停止 Ctrl + p,Ctrl + q # 退出后再进ubuntu镜像命令行 sudo docker attach b31ad42b2396 注:sudo docker ps 查看正在运行的容器id # 停止运行容器 sudo docker

继续阅读 »

Linux:libuv的uv_async使用

vu_async_t是我们要用的handle,这个handle用来在线程间通信的。handl->data可以存放数据。 配合uv_async_send,可以唤醒持有async的消息队列,并调用async的回调,而且这个是跨线程的,只保证uv_async_send调用一次之后,callback也必然至少调用一次, 但是因为是很多线程可以同时发送唤醒消息,所以,也可能被多次调用。 下载文件实时

继续阅读 »

C/C++:回调的方式代码实现

回调:在字面上的意思是A对象调用B对象的成员函数,但是B对象又想调用A对象的成员函数,实际上编译器在循环包含头文件的话会报错。 注意点:所有的回调函数和回调对象都要保持有效性,就是不能够被提前释放掉。 function和bind 这种方式就是利用C++11的语法,function有绑定的函数地址,在别的地方拿到的时候就可以直接调用了,但是在多线程中要使用小心,要保证对象的一致性。 方式代码

继续阅读 »

C++:一点点算法

/* * 判断字符串是不是回文字符串 */ bool IsPalindrone(const char *s,int n) { if(s == NULL || n < 1) { return false; } char *first,char *second; int m = (n/2-1) > 0?(n/2-1):0;

继续阅读 »

Linux:Ubuntu下链接动态库

让程序找到动态库(.so) 将生成的动态库拷贝到/usr/lib或者/lib下; 配置LD_LIBRARY_PATH = $LD_LIBRARY_PATH:.; 添加配置文件,/etc/ld.so.conf.d/my.conf,用ldconfig命令冲洗你刷新配置文件。 参考文章 demo: hello.c动态库源文件,hello.h动态库头文件 文件1: //hello.c #ifndef H

继续阅读 »

Golang:对Chanels的理解

题目:使用两个goroutine交替打印序列,一个goroutine打印数字,一个打印字母,最终效果如下:12AB34CD56EF78GH910IJ package main import ( "fmt" "runtime" ) func main() { runtime.GOMAXPROCS(runtime.NumCPU()) chan_n

继续阅读 »

Golang:sync.WaitGroup同步

//sync.WaitGroup的用途是它能够等待所有的goroutine执行完成,并且阻塞主线程的执行,直到所有的goroutine执行完成 //缺点:执行结果并不保证是顺序的,且进程结束并不会保证等待goroutine执行结束,无法指定固定的goroutine数量。可能通过channel解决这个问题 // Add():添加或者减少等待goroutine的数量 // Done():相当于

继续阅读 »