北风之神

北风之神 查看完整档案

海外编辑哈佛大学  |  核物理 编辑Borey Class  |  核专家 编辑 github.com 编辑
编辑

北风之神核潜战略专家

个人动态

北风之神 回答了问题 · 2月25日

linux 命令求解

有兴趣,可以看我以前的博客文章有说到TCP状态
https://learnku.com/articles/...

关注 6 回答 5

北风之神 回答了问题 · 2月22日

解决该怎么跟后端沟通

1 前端如果有android,ios,pc,小程序等要协商好需要的字段,不要android要这个,ios不要这个,pc要那个,android又不要那个。
2 后端要减少不必要的字段传输,节省下流量

你们要找项目负责人协商好,特别是前端有android,ios,pc,小程序不是一个人的情况下。

关注 17 回答 14

北风之神 回答了问题 · 2月22日

关于python-daemon问题

报啥错了?
运行结果是啥?
运行的时候你调试一下gdb调试

关注 2 回答 1

北风之神 回答了问题 · 2月22日

怎样绕过公司网络过滤听qq音乐?

你可以考虑进小公司的

关注 4 回答 2

北风之神 回答了问题 · 2月19日

解决请问一下PHP如何给workman服务端发送信息

如果类引用正确
1 运行时是否真的连接上192.168.1.1:9999 了?
2 ws://192.168.1.1:9999 服务是否启动了?
3 你的运行平台是win还是linux?

以上你需要的基础知识就是SOCKET API 编程,如果以上的问题你无法处理,可以联系我,我远程 给你处理掉。
如果你需要补充基础知识,可以看看:https://blog.csdn.net/m0_5474...

关注 3 回答 2

北风之神 回答了问题 · 2月7日

golang 参数都使用指针传递有什么缺点

没有写过go,只写过c++,勉强装一下
值传递 如你所说存在拷贝【像c++就有拷贝构造函数,拷贝赋值函数】
指针【只是一段内存,大家称为指针】传递 接收者接收到的就是一段内存,这个时候大家共同指向同一段内存地址,内部修改,外部也会跟着改变,毕竟同一块内存,在c++中就有这个移动构造函数,移动赋值,移动语义。

1 引用传递内部的误修改可能会影响到外部传递的数据
2 在多线程中,默认情况下跨线程传递参数是值拷贝方式,如主线程传递给B子线程,B线程是拷贝方式存起来操作,这样就不会影响到主线程的数据,如果主线程结束了【默认一般是整个进程结束,所有子线程被强制终止】,如果指针传递,主线程结束了,但是对象A对(你们可能叫结构体)是在主线程声明定义的,传递给子线程,子线程还没有执行,或是执行到一半,而主线程结束释放了该对象的内存,子线程还去操作这个已经被回收的内存,程序立马报错。如果是值传递,子线程是拷贝过去的,就不会存在这种问题。

以上我是开发多线程项目时遇到的经验。不知道适合不适合你们go.仅供参考。

关注 5 回答 4

北风之神 回答了问题 · 2月5日

刚学C语言,程序生成时可以,但链接时失败, warning C4133

去电脑店维修电脑,不带电脑?

你这个报错大概是在WIN系统上报错。估计还是老的编译器

关注 2 回答 1

北风之神 回答了问题 · 2月5日

SIGPIPE 信号为什么不能杀死一个 golang 的进程?

图片.png
图片.png
【结论:go的编译器对SIGPIPE等部分中断信号做了一些屏蔽处理,下面是长篇大论的验证,如果你有兴趣可以看一看,go的编译器实现很骚,是我见过最骚最不单纯的语言】

如果你以前写过进程间通信【管理,匿名管道,文件,SOCKET等】可能遇到过此中断信号SIGPIPE
如果你以前亲自写过网络编程 可能对SIGPIPE中断信号非常熟悉

中断信号 简称软中断,它的处理机制跟硬件中断类似,有中断请求,中断处理【处理过程有的称为中断处理程序,中断处理函数,比如你写过网络编程就知道 网卡接收到数据时,会发起中断请求到CPU,CPU执行中断处理程序,就会把数据写入到对应的SOCKET 文件,比如EPOLL 文件,同时唤醒进程执行 SOCKET的读写操作】中断处理完以后,就会返回到原处,称为中断返回,整个过程就是中断的处理机制。

在LINUX 中可以通过kill命令列出所有的中断信号,每个信号都以SIG开头,后面就是中断的名字,前面的数值就是中断信号的编号。最常用的就是前面的32个。

图片.png

每个中断信号都有相应的中断处理程序【处理函数】默认有3种类型的【1是系统默认动作,2是忽略 3是用户编写的中断处理程序】

中断信号除了用于进程间的简单通信,还能让进程终止,停止,恢复执行【如进程作业控制】,有些信号进程可以忽略,捕获,有些信号进程不能忽略和捕获,主要用于安全的确保终止和停止如SIGKILL,SIGSTOP
同时有些中断信号还能产生ELF 文件即core 文件并终止。

给进程发送信号除了编程语言封装的如php posix_kill,c/c++则是kill,但都是用linux api的kill
而终端命令如kill就是用来发送中断信号的,并不是所谓的“杀死”

进程可以设置屏蔽字设置阻塞的中断信号,当中断信号产生请求时,会被阻塞,并存储在未决集里

中断信号还能影响到系统调用,如果你写过网络编程,或是你了解网络框架,了解网络通信协议如HTTP,WEBSOCKET等,你会发现一个东西叫 “中断系统调用”或是你掌握网络编程时,必须知道“中断系统调用” 和 “可重入函数” 如IO复用函数select,epoll都是中断系统调用。

中断信号的掌握是一个程序员掌握网络编程的一个关键知识点。

更多知识点请自行阅读LINUX API 手册 或是@ me

以上知识跟编程语言没有任何关系!!!

下面恢复测试你的程序
go文件补充【我不是学go语言的,因为这些知识跟语言没有任何关系】
图片.png
图片.png
文件类型,只是一个文本文件,你们称为go源码文件
图片.png

在控制终端进程下启动go程序
图片.png

图片.png
查看是何命令启动的:
图片.png
查看进程关联了哪个输入输出文件
图片.png
里里有epoll文件和2个管道文件【google闲的没事干了】
图片.png

图片.png
上面这些内容是什么意思?
图片.png
看完上面的图,你就知道go的实现机制很骚,并不是启动一个进程,而启动一堆进程和线程

图片.png
接下来我们用c程序测试SIGPIPE 中断信号
图片.png
图片.png

执行信号的默认动作 SIGPIPE
图片.png

关注 3 回答 2

北风之神 回答了问题 · 2月3日

一个进程,如果能被 ctrl-C 杀死,是不是它本身必须实现了信号量的处理?

ctrl+c 在linux 终端下会产生中断信号,默认情况下该信号会使进程终止结束
进程可以设置屏蔽字对信号集进行屏蔽,有些信号如SIGKILL等无法屏蔽,是必须处理的中断信号

如果你有兴趣想了解更多,可以看看我的video

关注 2 回答 1

北风之神 回答了问题 · 2月2日

解决 rust or c++? 要不要学rust?

c++ 强烈推荐

关注 4 回答 2

认证与成就

  • 获得 26 次点赞
  • 获得 4 枚徽章 获得 0 枚金徽章, 获得 0 枚银徽章, 获得 4 枚铜徽章

擅长技能
编辑

开源项目 & 著作
编辑

  • 美国军火雷达火控系统

    该项目由本人亲自参与,在美国多任总统的批准下,完成了雷达系统的自动搜索,自动控制军火系统,自动警报,探测距离达整个银河系,可在1毫秒以内瞬间击落对方敌机。项目给美国军火公司带来了丰厚的利润和技术价值。

注册于 2019-06-03
个人主页被 1.9k 人浏览