h******k 发帖数: 388 | |
b*******s 发帖数: 5216 | 2 logging
【在 h******k 的大作中提到】 : 比如说怎么发现线程死锁? 我现在用Java。
|
g*******t 发帖数: 7704 | |
g*****g 发帖数: 34805 | 4 Take a thread dump and there are many tools that can find deadlock for you.
e.g. visualvm
【在 h******k 的大作中提到】 : 比如说怎么发现线程死锁? 我现在用Java。
|
z****e 发帖数: 54598 | 5 jstack PID > yourFileName
vi yourFileName |
x****u 发帖数: 44466 | 6 解决线程或者内存问题的最重要手段就是,不要借助调试。
【在 h******k 的大作中提到】 : 比如说怎么发现线程死锁? 我现在用Java。
|
N******K 发帖数: 10202 | 7 意淫?
【在 x****u 的大作中提到】 : 解决线程或者内存问题的最重要手段就是,不要借助调试。
|
f******y 发帖数: 2971 | 8 写程序的时候线程之间尽量独立,有时宁愿多用一些内存。
【在 N******K 的大作中提到】 : 意淫?
|
x****u 发帖数: 44466 | 9 如果靠工具或者调试才能找到线程或者内存错误,你会漏掉百分之几十的。
【在 N******K 的大作中提到】 : 意淫?
|
h******k 发帖数: 388 | 10 大系统不可能所有程序都自己写。出了问题只有调试了。
【在 x****u 的大作中提到】 : 如果靠工具或者调试才能找到线程或者内存错误,你会漏掉百分之几十的。
|
|
|
h******k 发帖数: 388 | 11 多谢bug和蜥蜴
【在 h******k 的大作中提到】 : 大系统不可能所有程序都自己写。出了问题只有调试了。
|
m*******l 发帖数: 12782 | 12 切,当年小菊用刮胡刀直接在硬盘上刻OS的时候,你没有见过而已
【在 N******K 的大作中提到】 : 意淫?
|
g*****g 发帖数: 34805 | 13 你写过吗?有多少同时在线用户?纯扯蛋。除非你用node之类单线程的架构,否则是不
可避免的。
【在 x****u 的大作中提到】 : 如果靠工具或者调试才能找到线程或者内存错误,你会漏掉百分之几十的。
|
x****u 发帖数: 44466 | 14 99.99的代码都不应该设计线程同步问题,不然就是设计问题。
【在 h******k 的大作中提到】 : 大系统不可能所有程序都自己写。出了问题只有调试了。
|
x****u 发帖数: 44466 | 15 你让几百个工程师一起写多线程互斥,恭喜你,丰田的HR就在门外等着呢。
【在 g*****g 的大作中提到】 : 你写过吗?有多少同时在线用户?纯扯蛋。除非你用node之类单线程的架构,否则是不 : 可避免的。
|
b*******s 发帖数: 5216 | 16 丰田的问题不是多线程问题,是没常识
【在 x****u 的大作中提到】 : 你让几百个工程师一起写多线程互斥,恭喜你,丰田的HR就在门外等着呢。
|
x****u 发帖数: 44466 | 17 让人人都碰线程同步,比人人写全局变量还麻烦。
【在 b*******s 的大作中提到】 : 丰田的问题不是多线程问题,是没常识
|
b*******s 发帖数: 5216 | 18 你这个是虚构的场景吧
【在 x****u 的大作中提到】 : 让人人都碰线程同步,比人人写全局变量还麻烦。
|
x****u 发帖数: 44466 | 19 不是虚构,CPP的最大特点就是一个蚁穴可以毁掉大坝
【在 b*******s 的大作中提到】 : 你这个是虚构的场景吧
|
k**********g 发帖数: 989 | 20
The correct approach is to use actor model.
It may not have good performance, but any other multicore approach will be
10x more difficult than using actor model.
The fundamental constructs inside an actor model framework:
1. thread-safe queue (preferably lock-free or obstruction-free)
2. thread pool
3. worker pool (each worker runs on one thread on the thread pool)
4. task queue / task pool (a collection of ready-to-run tasks)
(remark: it is called task pool because it is not necessarily a "queue",
i.e. not required to be FIFO)
5. lambda wrapper
a data structure that encapsulates a piece of work; this data structure
(or a pointer reference to it) will be the data type of the task pool.
6. exception wrapper
allows an exception thrown from the lambda wrapper to be "shipped over"
to a different thread.
7. object lifetime utilities such as reference-counted shared pointer, weak
pointer, atomics etc.
8. some "correctness sugar" (similar to syntactic sugar, but whose purpose
is to make it easier to write correct code) such as single assignment
variables
may have a few other stuff i forgot...
【在 x****u 的大作中提到】 : 99.99的代码都不应该设计线程同步问题,不然就是设计问题。
|
|
|
h******k 发帖数: 388 | 21 看上去很复杂,哪本书有介绍?
",
【在 k**********g 的大作中提到】 : : The correct approach is to use actor model. : It may not have good performance, but any other multicore approach will be : 10x more difficult than using actor model. : The fundamental constructs inside an actor model framework: : 1. thread-safe queue (preferably lock-free or obstruction-free) : 2. thread pool : 3. worker pool (each worker runs on one thread on the thread pool) : 4. task queue / task pool (a collection of ready-to-run tasks) : (remark: it is called task pool because it is not necessarily a "queue",
|
x****u 发帖数: 44466 | 22 基本上就是这么回事。
比如微软的DCOM,从20年前开始就是和多线程,多进程,数据同步死磕,所以为了降低
工作难度,基本上效率不重要的领域都是用STA实现的,让message queue同步数据,只
要不违反COM原则就啥问题也没有。
违反原则的地方也很容易通过review发现。
",
【在 k**********g 的大作中提到】 : : The correct approach is to use actor model. : It may not have good performance, but any other multicore approach will be : 10x more difficult than using actor model. : The fundamental constructs inside an actor model framework: : 1. thread-safe queue (preferably lock-free or obstruction-free) : 2. thread pool : 3. worker pool (each worker runs on one thread on the thread pool) : 4. task queue / task pool (a collection of ready-to-run tasks) : (remark: it is called task pool because it is not necessarily a "queue",
|
h******k 发帖数: 388 | 23 丰田应该改用Java。彻底解决全局变量问题:~)
【在 x****u 的大作中提到】 : 让人人都碰线程同步,比人人写全局变量还麻烦。
|
x****u 发帖数: 44466 | 24 刹车时正好碰上GC,然后就悲剧了。。。
【在 h******k 的大作中提到】 : 丰田应该改用Java。彻底解决全局变量问题:~)
|
b*******s 发帖数: 5216 | 25 能做到硬实时响应吗?
【在 h******k 的大作中提到】 : 丰田应该改用Java。彻底解决全局变量问题:~)
|
h******k 发帖数: 388 | 26 不是有real-time Java吗?
【在 x****u 的大作中提到】 : 刹车时正好碰上GC,然后就悲剧了。。。
|
x****u 发帖数: 44466 | 27 日本人最不喜欢搞行为艺术了。
【在 h******k 的大作中提到】 : 不是有real-time Java吗?
|
b*******s 发帖数: 5216 | 28 运行时决定类型的语言先天不足,c++现在也不鼓励那种继承的写法了
【在 h******k 的大作中提到】 : 不是有real-time Java吗?
|
N******K 发帖数: 10202 | 29 c++现在也不鼓励那种继承的写法了 —— 什么意思?
【在 b*******s 的大作中提到】 : 运行时决定类型的语言先天不足,c++现在也不鼓励那种继承的写法了
|
d****i 发帖数: 4809 | 30 所有的实时系统,只有C可以meet实时要求,连C++都不行,很多嵌入式系统上面的编译
器只支持C,C++只有限的用于一些上层的应用等等,这个我们是有过教训的。所以
Linus炮轰那些想把C++引入内核编程的话是对的,更不用说隔着一层虚拟机的Java了。
以前嵌入式杂志有个关于嵌入式编程所用语言的调查,C占了75%,C++占了20%,剩下5%
是汇编。
【在 h******k 的大作中提到】 : 不是有real-time Java吗?
|
|
|
z****e 发帖数: 54598 | 31 real time jvm可以用在导弹拦截上
其实也没有必要那么折腾,直接修改源代码
把gc规则调整成显式调用就行了
就是说那样的话,可能就不能叫java了
不过java这个东西本身就是一套eco,很多东西本来就不是那么严格地遵循定义
比如android
【在 x****u 的大作中提到】 : 日本人最不喜欢搞行为艺术了。
|
z****e 发帖数: 54598 | 32 主要是很多real time需要硬件自身的支持
pc上大多数cpu到ms阶段就吃不消了,误差就很大,无论用什么写
那如果硬件都要改的话,那用一个统一软件平台就没有太多意义
5%
【在 d****i 的大作中提到】 : 所有的实时系统,只有C可以meet实时要求,连C++都不行,很多嵌入式系统上面的编译 : 器只支持C,C++只有限的用于一些上层的应用等等,这个我们是有过教训的。所以 : Linus炮轰那些想把C++引入内核编程的话是对的,更不用说隔着一层虚拟机的Java了。 : 以前嵌入式杂志有个关于嵌入式编程所用语言的调查,C占了75%,C++占了20%,剩下5% : 是汇编。
|
N******K 发帖数: 10202 | 33 c和c++功能上的区别 也就是成员变量了吧
c++的成员变量 是系统状态 这个东西有问题
如果多个类的成员变量都是指向同一个类的指针 会有内存问题
不如用全局变量
以前的嵌入式内存太少 功能简单 c足够了
5%
【在 d****i 的大作中提到】 : 所有的实时系统,只有C可以meet实时要求,连C++都不行,很多嵌入式系统上面的编译 : 器只支持C,C++只有限的用于一些上层的应用等等,这个我们是有过教训的。所以 : Linus炮轰那些想把C++引入内核编程的话是对的,更不用说隔着一层虚拟机的Java了。 : 以前嵌入式杂志有个关于嵌入式编程所用语言的调查,C占了75%,C++占了20%,剩下5% : 是汇编。
|
d****i 发帖数: 4809 | 34 这个是,所以在嵌入式系统上,不同于桌面和现在的手机系统比较容易统一平台, RTOS
五花八门,大大小小大概有几百种,当然代表性的就那么十几种。
【在 z****e 的大作中提到】 : 主要是很多real time需要硬件自身的支持 : pc上大多数cpu到ms阶段就吃不消了,误差就很大,无论用什么写 : 那如果硬件都要改的话,那用一个统一软件平台就没有太多意义 : : 5%
|
N******K 发帖数: 10202 | 35 real time系统有很多硬件中断 pc的硬件中断也就键盘什么的没几个
【在 z****e 的大作中提到】 : 主要是很多real time需要硬件自身的支持 : pc上大多数cpu到ms阶段就吃不消了,误差就很大,无论用什么写 : 那如果硬件都要改的话,那用一个统一软件平台就没有太多意义 : : 5%
|
k**********g 发帖数: 989 | 36
The key to safety is to require one of these: isolation, immutability, or
idempotence.
Functional programming enforces immutability at the language level.
Database and networking folks prefers idempotence.
DCOM didn't enforce anything. (It only "disables" things.) Therefore, in
terms of multithreading, it's kind of a joke.
【在 x****u 的大作中提到】 : 基本上就是这么回事。 : 比如微软的DCOM,从20年前开始就是和多线程,多进程,数据同步死磕,所以为了降低 : 工作难度,基本上效率不重要的领域都是用STA实现的,让message queue同步数据,只 : 要不违反COM原则就啥问题也没有。 : 违反原则的地方也很容易通过review发现。 : : ",
|
x****u 发帖数: 44466 | 37 现在任何有GUI的系统,都有可以和DCOM能很简单实现映射的模型架构存在。无知无畏
的回去玩FP吧。
【在 k**********g 的大作中提到】 : : The key to safety is to require one of these: isolation, immutability, or : idempotence. : Functional programming enforces immutability at the language level. : Database and networking folks prefers idempotence. : DCOM didn't enforce anything. (It only "disables" things.) Therefore, in : terms of multithreading, it's kind of a joke.
|
x****o 发帖数: 21566 | 38 稍后车就被collected 了
【在 x****u 的大作中提到】 : 刹车时正好碰上GC,然后就悲剧了。。。
|
d******e 发帖数: 2265 | 39 做复杂的server 端没有多线程?
你没见过deadlock什么不等于不存在。只是你的程序run的次数是在太少,不足以repro.
有写bug几年一见,除了看dump否则根本没法抓到。
【在 x****u 的大作中提到】 : 基本上就是这么回事。 : 比如微软的DCOM,从20年前开始就是和多线程,多进程,数据同步死磕,所以为了降低 : 工作难度,基本上效率不重要的领域都是用STA实现的,让message queue同步数据,只 : 要不违反COM原则就啥问题也没有。 : 违反原则的地方也很容易通过review发现。 : : ",
|
x****u 发帖数: 44466 | 40 你这是小孩常见想法
repro.
【在 d******e 的大作中提到】 : 做复杂的server 端没有多线程? : 你没见过deadlock什么不等于不存在。只是你的程序run的次数是在太少,不足以repro. : 有写bug几年一见,除了看dump否则根本没法抓到。
|
|
|
d******e 发帖数: 2265 | 41 这是你家软软的标准做法。你才investigate多少waston dumps?估计一个都没有。
老子当年修的bugs 1/10强是deadlock或者多线程相关的。
【在 x****u 的大作中提到】 : 你这是小孩常见想法 : : repro.
|
p*****8 发帖数: 11 | 42 Mark.
【在 g*****g 的大作中提到】 : Take a thread dump and there are many tools that can find deadlock for you. : e.g. visualvm
|