当前在线人数8495
首页 - 分类讨论区 - 电脑网络 - 葵花宝典版 - 同主题阅读文章

此篇文章共收到打赏
0

  • 10
  • 20
  • 50
  • 100
您目前伪币余额:0
未名交友
[更多]
[更多]
最近面试都是多线程的啦?类似c++ semaphore , 但需要动态改
[版面:葵花宝典][首篇作者:gobigred] , 2020年02月24日13:51:57 ,1905次阅读,29次回复
来APP回复,赚取更多伪币 关注本站公众号:
[首页] [上页][下页][末页] [分页:1 2 ]
gobigred
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 1 ]

发信人: gobigred (我是tony), 信区: Programming
标  题: 最近面试都是多线程的啦?类似c++ semaphore , 但需要动态改变semaphore的值
发信站: BBS 未名空间站 (Mon Feb 24 13:51:57 2020, 美东)

面试题是这样的,c++
有很多同时进行的 request 或者action, 都会call同一个function,

需要你在这个function中控制同时执行的request/action的数目。
这个数目可变,
譬如, 刚开始, 允许的数目是 1, 也就是每次只有一个可以执行,相当于mutex. 假
如有500 个request, 那就是一个完了在下一个
过一段时间, 用户把允许的数目改为500, 也就是同时可以500个一起(当然也是
protected), 相当于semaphore, 假如有500个,可以不等待一起执行, 假如是1000个
,第一批500个同时进行,后面的就得等 someone to sem_post.

一开始思路就是这样,讨论了一会。 但问题是, 这个数目可以动态变化, 怎么实现。
这样的话, mutex 和 semaphore 都不能选了,semaphore不能改值, 想到可以可以
用 conditional_variable, 把“到了500个”作为一个event,  很快时间到了,也没能
给出答案。后来想想, 好像是可以的。
哪位大牛看看怎么实现比较好?


--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2601:641:8080:1]

 
fantasist
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 2 ]

发信人: fantasist (一), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c++ semaphore , 但需要动
发信站: BBS 未名空间站 (Mon Feb 24 14:01:57 2020, 美东)

其实就是要实现一个能动态改大小的thread pool
--
☆ 发自 iPhone 买买提 1.24.11
--
※ 修改:·fantasist 於 Feb 24 15:33:11 2020 修改本文·[FROM: 2620:10d:c090:50]
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2620:10d:c090:5]

 
pptwo
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 3 ]

发信人: pptwo (pp), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c++ semaphore , 但需要动态
发信站: BBS 未名空间站 (Mon Feb 24 16:42:14 2020, 美东)

这种问题在mutex/semaphore/conditional variable这一层解决不知道多少坑,
要用高一层的语义:
1 先实现一个multiple producer multiple consumer的queue。
2 实现一个scheduler线程管理允许数目和worker数目。worker数目不够就开新的,
  worker数目多了的话往queue里插退出指令。
3 实现worker,从queue里取任务,如果是退出指令就退出。

搞定了再讨论讨论work stealing这类优化。

【 在 gobigred (我是tony) 的大作中提到: 】
: 面试题是这样的,c++
: 有很多同时进行的 request 或者action, 都会call同一个function,
: 需要你在这个function中控制同时执行的request/action的数目。
: 这个数目可变,
: 譬如, 刚开始, 允许的数目是 1, 也就是每次只有一个可以执行,相当于mutex. 假
: 如有500 个request, 那就是一个完了在下一个
: 过一段时间, 用户把允许的数目改为500, 也就是同时可以500个一起(当然也是
: protected), 相当于semaphore, 假如有500个,可以不等待一起执行, 假如是1000个
: ,第一批500个同时进行,后面的就得等 someone to sem_post.
: 一开始思路就是这样,讨论了一会。 但问题是, 这个数目可以动态变化, 怎么实
现。
: ...................


--

※ 来源:·BBS 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 104.]

 
gobigred
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 4 ]

发信人: gobigred (我是tony), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c++ semaphore , 但需要动
发信站: BBS 未名空间站 (Mon Feb 24 18:34:38 2020, 美东)


【 在 pptwo (pp) 的大作中提到: 】
: 这种问题在mutex/semaphore/conditional variable这一层解决不知道多少坑,
: 要用高一层的语义:
: 1 先实现一个multiple producer multiple consumer的queue。
: 2 实现一个scheduler线程管理允许数目和worker数目。worker数目不够就开新的,
:   worker数目多了的话往queue里插退出指令。
: 3 实现worker,从queue里取任务,如果是退出指令就退出。
: 搞定了再讨论讨论work stealing这类优化。
: 现。



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2601:641:8080:1]

 
gobigred
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 5 ]

发信人: gobigred (我是tony), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c++ semaphore , 但需要动
发信站: BBS 未名空间站 (Mon Feb 24 18:47:28 2020, 美东)

很有见地。 当时觉得是个很常见的pattern,讨论时发现在这一层还不好办。
面试官提了一种情况,所有request 是从一个queue 出来, 然后系统会为每个request
call HandleRequest
e.g.
HandleRequest (Request request)
{
 

}
其中有好几个stage, 只有在用其中一个function 的stage 才需要 concurrency
control,才想着看在内部怎么搞

【 在 pptwo (pp) 的大作中提到: 】
: 这种问题在mutex/semaphore/conditional variable这一层解决不知道多少坑,
: 要用高一层的语义:
: 1 先实现一个multiple producer multiple consumer的queue。
: 2 实现一个scheduler线程管理允许数目和worker数目。worker数目不够就开新的,
:   worker数目多了的话往queue里插退出指令。
: 3 实现worker,从queue里取任务,如果是退出指令就退出。
: 搞定了再讨论讨论work stealing这类优化。
: 现。



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2601:641:8080:1]

 
guvest
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 6 ]

发信人: guvest (我爱你老婆Anna), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
发信站: BBS 未名空间站 (Mon Feb 24 19:41:26 2020, 美东)

Assuming you can use Redis, would it be a straightforward project ?

I did not familiar with cpp. python  and redis queue often worked
well.


【 在 gobigred(我是tony) 的大作中提到: 】
<br>: 很有见地。 当时觉得是个很常见的pattern,讨论时发现在这一层还不好
办。
<br>: 面试官提了一种情况,所有request 是从一个queue 出来, 然后系统会
为每个
request
<br>:  call HandleRequest
<br>: e.g.
<br>:  HandleRequest (Request request)
<br>: {
<br>:  
<br>: }
<br>: 其中有好几个stage, 只有在用其中一个function 的stage 才需要
concurrency
<br>: control,才想着看在内部怎么搞
<br>


--
※ 修改:·guvest 於 Feb 24 19:42:47 2020 修改本文·[FROM: 76.]
※ 来源:· 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:1cd9:]

 
gobigred
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 7 ]

发信人: gobigred (我是tony), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
发信站: BBS 未名空间站 (Mon Feb 24 19:59:04 2020, 美东)

可以具体阐述一下? 这个redis queue 怎么用可以实现? 是指在共用的这个function
里用个redis?还是在外面 把现有的queue换成redis queue, 然后queue 可以动态设
多少可以同时process? 这样的话 很多不需要同步protection也要protected 的啦?
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: Assuming you can use Redis, would it be a straightforward project ?
: I did not familiar with cpp. python  and redis queue often worked
: well.
: <br>: 很有见地。 当时觉得是个很常见的pattern,讨论时发现在这一层还不好
: 办。
: <br>: 面试官提了一种情况,所有request 是从一个queue 出来, 然后系统会
: 为每个
: request
: <br>:  call HandleRequest
: <br>: e.g.
: ...................



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2601:641:8080:1]

 
guvest
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 8 ]

发信人: guvest (我爱你老婆Anna), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
发信站: BBS 未名空间站 (Mon Feb 24 20:06:35 2020, 美东)

https://python-rq.org/

It looked to me it would be quite easy to implement pptwo’s step one
by
using above software.

Redis handled the concurrency of read/write key/value very well. U can use
it as a global concurrency control server .


【 在 gobigred(我是tony) 的大作中提到: 】
<br>: 可以具体阐述一下? 这个redis queue 怎么用可以实现? 是指在共用的
这个
function
<br>: 里用个redis?还是在外面 把现有的queue换成redis queue, 然后queue
可以
动态设
<br>: 多少可以同时process? 这样的话 很多不需要同步protection也要
protected
的啦?
<br>


--
※ 修改:·guvest 於 Feb 24 20:12:01 2020 修改本文·[FROM: 76.]
※ 来源:· 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:1cd9:]

 
netghost
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 9 ]

发信人: netghost (Up to Isomorphism), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
发信站: BBS 未名空间站 (Mon Feb 24 20:12:37 2020, 美东)

暈,清清楚楚一道題,就變成了一堆東西瞎堆。。。

不過也好,大家都有活幹,不過我認爲還是會幹的人幹,別人給錢不上班最好 。
【 在 gobigred (我是tony) 的大作中提到: 】
: 标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
: 发信站: BBS 未名空间站 (Mon Feb 24 19:59:04 2020, 美东)
:
: 可以具体阐述一下? 这个redis queue 怎么用可以实现? 是指在共用的这个
function
: 里用个redis?还是在外面 把现有的queue换成redis queue, 然后queue 可以动态设
: 多少可以同时process? 这样的话 很多不需要同步protection也要protected 的啦?
: 【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: : Assuming you can use Redis, would it be a straightforward project ?
: : I did not familiar with cpp. python  and redis queue often worked
: : well.
: : <br>: 很有见地。 当时觉得是个很常见的pattern,讨论时发现在这一层还不好
: : 办。
: : <br>: 面试官提了一种情况,所有request 是从一个queue 出来, 然后系统会
: : 为每个
: : request
: : <br>:  call HandleRequest
: : <br>: e.g.
: : ...................
:
:
:
: --
: ※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2601:641:8080:1]



--

※ 来源:·BBS 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 71.]

 
guvest
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 10 ]

发信人: guvest (我爱你老婆Anna), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
发信站: BBS 未名空间站 (Mon Feb 24 20:14:28 2020, 美东)

What is your solution ?

In real life, I did not suggest doing such type of thing by yourself. Why
not try to find a library first.

【 在 netghost(Up to Isomorphism) 的大作中提到: 】
<br>: 暈,清清楚楚一道題,就變成了一堆東西瞎堆。。。
<br>: 不過也好,大家都有活幹,不過我認爲還是會幹的人幹,別人給錢不上班
最好 。
<br>: function
<br>


--
※ 修改:·guvest 於 Feb 24 20:16:39 2020 修改本文·[FROM: 76.]
※ 来源:· 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:1cd9:]

 
gobigred
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 11 ]

发信人: gobigred (我是tony), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
发信站: BBS 未名空间站 (Mon Feb 24 20:33:26 2020, 美东)

能否共享一下你的solution?这个题本身是很明确的,题意就是在那个特地的function
里做concurrency control, 其他同学的建议在外层也是个思路。
【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 暈,清清楚楚一道題,就變成了一堆東西瞎堆。。。
: 不過也好,大家都有活幹,不過我認爲還是會幹的人幹,別人給錢不上班最好 。
: function



--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2601:641:8080:1]

 
netghost
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 12 ]

发信人: netghost (Up to Isomorphism), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
发信站: BBS 未名空间站 (Mon Feb 24 22:01:26 2020, 美东)

直接做就好,這些function都share一個變量,用鎖保護,函數開始先加鎖檢查這個變
量是不是500,不是的話,加1放鎖,否則調pthread_cond_wait.
函數結束的時候,加鎖,-1,調 pthread_cond_signal,然後放鎖。

問題是,爲啥並行度檢測要放到某個函數裏面去,一般來說應該統一調配,除非有特殊
的理由。
【 在 gobigred (我是tony) 的大作中提到: 】
: 能否共享一下你的solution?这个题本身是很明确的,题意就是在那个特地的
function
: 里做concurrency control, 其他同学的建议在外层也是个思路。



--

※ 来源:·BBS 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 71.]

 
chebyshev
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 13 ]

发信人: chebyshev (......), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
发信站: BBS 未名空间站 (Mon Feb 24 22:11:45 2020, 美东)

It looked to me that the requests are not as simple as you thought.
He was asked to control the threads of request/action with some complicate
control logic.Thus,the control logic need to be saved in a separate module (
a function).

Since the control logic is quite complicate, in real life project, I would
suggest using Redis lock/queue/etc.


=============================The control logic:=====
譬如, 刚开始, 允许的数目是 1, 也就是每次只有一个可以执行,相当于mutex. 假
如有500 个request, 那就是一个完了在下一个
过一段时间, 用户把允许的数目改为500, 也就是同时可以500个一起(当然也是
protected), 相当于semaphore, 假如有500个,可以不等待一起执行, 假如是1000个
,第一批500个同时进行,后面的就得等 someone to sem_post.

【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: 直接做就好,這些function都share一個變量,用鎖保護,函數開始先加鎖檢查這個變
: 量是不是500,不是的話,加1放鎖,否則調pthread_cond_wait.
: 函數結束的時候,加鎖,-1,調 pthread_cond_signal,然後放鎖。
: 問題是,爲啥並行度檢測要放到某個函數裏面去,一般來說應該統一調配,除非有特殊
: 的理由。
: function







--
※ 修改:·chebyshev 於 Feb 24 22:17:52 2020 修改本文·[FROM: 76.]
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 76.]

 
netghost
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 14 ]

发信人: netghost (Up to Isomorphism), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
发信站: BBS 未名空间站 (Tue Feb 25 00:12:06 2020, 美东)

The idea is the same if you want the maximum cucurrency to be tunable, and
can just left as an excercise if you understand how original code works.

The key observation is that threads have to wait on conditions to be
satisfied, whether it is one condition or two conditions, is not essential.

【 在 chebyshev (......) 的大作中提到: 】
: 标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
: 发信站: BBS 未名空间站 (Mon Feb 24 22:11:45 2020, 美东)
:
: It looked to me that the requests are not as simple as you thought.
: He was asked to control the threads of request/action with some complicate
: control logic.Thus,the control logic need to be saved in a separate module
(
: a function).
:
: Since the control logic is quite complicate, in real life project, I would
: suggest using Redis lock/queue/etc.
:
:
: =============================The control logic:=====
: 譬如, 刚开始, 允许的数目是 1, 也就是每次只有一个可以执行,相当于mutex. 假
: 如有500 个request, 那就是一个完了在下一个
: 过一段时间, 用户把允许的数目改为500, 也就是同时可以500个一起(当然也是
: protected), 相当于semaphore, 假如有500个,可以不等待一起执行, 假如是1000个
: ,第一批500个同时进行,后面的就得等 someone to sem_post.
:
: 【 在 netghost (Up to Isomorphism) 的大作中提到: 】
: : 直接做就好,這些function都share一個變量,用鎖保護,函數開始先加鎖檢查這
個變
: : 量是不是500,不是的話,加1放鎖,否則調pthread_cond_wait.
: : 函數結束的時候,加鎖,-1,調 pthread_cond_signal,然後放鎖。
: : 問題是,爲啥並行度檢測要放到某個函數裏面去,一般來說應該統一調配,除非有
特殊
: : 的理由。
: : function
:
:
:
:
:
:
:
: --
: ※ 修改:·chebyshev 於 Feb 24 22:17:52 2020 修改本文·[FROM: 76.]
: ※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 76.]



--

※ 修改:·netghost 于 Feb 25 00:14:59 2020 修改本文·[FROM: 71.]
※ 来源:·BBS 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 71.]

 
guvest
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 15 ]

发信人: guvest (我爱你老婆Anna), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
发信站: BBS 未名空间站 (Tue Feb 25 00:51:57 2020, 美东)

There could be some corner cases because the interviewee
did not tell people how the MaxConcurrency is changed.
But I agreed that the most fundamental case will be a thread pool that the
size could be changed based on some conditions.

However, sometimes it was not easy to let “這些function都share一個變量
”. 
If performance did matter, I would set a key in Redis instead of using a
shared variable. Also, Redis can be used in multi-platforms and can be
accessed by other languages.

To me, by using Redis as a global resource, we  may have cleaner and more 
robust solution (though slower).


【 在 netghost(Up to Isomorphism) 的大作中提到: 】
<br>: The idea is the same if you want the maximum cucurrency to be
tunable,
and
<br>: can just left as an excercise if you understand how original
code
works.
<br>: The key observation is that threads have to wait on conditions
to be
<br>: satisfied, whether it is one condition or two conditions, is not
essential.
<br>:  (
<br>: 個變
<br>: 特殊
<br>



--
※ 修改:·guvest 於 Feb 25 00:58:03 2020 修改本文·[FROM: 2607:fb90:1cd9:5]
※ 来源:· 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 2607:fb90:1cd9:]

 
wwrechard
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 16 ]

发信人: wwrechard (木有...), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c++ semaphore , 但需要动态改
发信站: BBS 未名空间站 (Tue Feb 25 06:00:23 2020, 美东)

这和read write lock的设计有什么区别?multiple read不就允许动态控制多少个
thread可以读?

【 在 gobigred (我是tony) 的大作中提到: 】
: 面试题是这样的,c++
: 有很多同时进行的 request 或者action, 都会call同一个function,
: 需要你在这个function中控制同时执行的request/action的数目。
: 这个数目可变,
: 譬如, 刚开始, 允许的数目是 1, 也就是每次只有一个可以执行,相当于mutex. 假
: 如有500 个request, 那就是一个完了在下一个
: 过一段时间, 用户把允许的数目改为500, 也就是同时可以500个一起(当然也是
: protected), 相当于semaphore, 假如有500个,可以不等待一起执行, 假如是1000个
: ,第一批500个同时进行,后面的就得等 someone to sem_post.
: 一开始思路就是这样,讨论了一会。 但问题是, 这个数目可以动态变化, 怎么实
现。
: ...................




--
☆ 发自 iPad 买买提 1.24.10
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 107.]

 
walkrandom
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 17 ]

发信人: walkrandom (walkrandom), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c++ semaphore , 但需要动态改
发信站: BBS 未名空间站 (Tue Feb 25 10:46:56 2020, 美东)

就是设计一个semaphore

talk is cheap,show the code

白板上写点代码就完了

--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 108.]

 
dongdongbb
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 18 ]

发信人: dongdongbb (dd), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c++ semaphore , 但需要动态改
发信站: BBS 未名空间站 (Tue Feb 25 11:05:08 2020, 美东)

这个应该用event loop吧, 就两个process,第一个接受request, 让后把它放进queue
里, 第二个读queue,可以一次读一个,或者500个,取决你的参数,然后执行
callback function

唯一的lock是在queue上,用mutex即可。但更好的是用lock free

--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 71.]

 
netghost
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 19 ]

发信人: netghost (Up to Isomorphism), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
发信站: BBS 未名空间站 (Tue Feb 25 16:31:12 2020, 美东)

If you want to make this one a typical scenario in big companies, it is your
choice. But all i know this is a very straightforward application of thread
programming, but you want to use the heaviest IPC (socket) and plus some
middleware to accomplish it.


BTW, how do you know redis does not have "corner cases", you read all its
source code?
【 在 guvest (我爱你老婆Anna) 的大作中提到: 】
: There could be some corner cases because the interviewee
: did not tell people how the MaxConcurrency is changed.
: But I agreed that the most fundamental case will be a thread pool that the
: size could be changed based on some conditions.
: However, sometimes it was not easy to let “這些function都share一個變量
: ”. 
: If performance did matter, I would set a key in Redis instead of using a
: shared variable. Also, Redis can be used in multi-platforms and can be
: accessed by other languages.
: To me, by using Redis as a global resource, we  may have cleaner and more 
: ...................


--

※ 来源:·BBS 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 204.]

 
guvest
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 20 ]

发信人: guvest (我爱你老婆Anna), 信区: Programming
标  题: Re: 最近面试都是多线程的啦?类似c   semaphore
发信站: BBS 未名空间站 (Tue Feb 25 17:08:02 2020, 美东)


I read part of the  Redis source code. However, that was not the
reason that I would like to consider to use well maintained library in this
use case. I preferred to use existing library because I thought the use
case 
was NOT straightforward and the development risk could be very high.
(I did not consider the maintain cost yet). For example, those requests
could
come from different processes in different machines.

With that said, i was totally OK with that you believed that the task was
just a straightforward application of pthread,signal, etc.
Quite often, many different engineering paths/styles could all lead good
solutions.


【 在 netghost(Up to Isomorphism) 的大作中提到: 】
<br>: If you want to make this one a typical scenario in big companies, it
is your
<br>:  choice. But all i know this is a very straightforward application of
thread
<br>:  programming, but you want to use the heaviest IPC (socket) and plus
some
<br>: middleware to accomplish it.
<br>: BTW, how do you know redis does not have "corner cases", you read all
its
<br>: source code?
<br>







--
※ 修改:·guvest 於 Feb 25 17:23:00 2020 修改本文·[FROM: 38.]
※ 来源:· 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 38.]

[首页] [上页][下页][末页] [分页:1 2 ]
[快速返回] [ 进入葵花宝典讨论区] [返回顶部]
回复文章
标题:
内 容:

未名交友
将您的链接放在这儿

友情链接


 

Site Map - Contact Us - Terms and Conditions - Privacy Policy

版权所有,未名空间(mitbbs.com),since 1996