当前在线人数12215
首页 - 分类讨论区 - 海外生活 - 待字闺中版 - 同主题阅读文章

此篇文章共收到打赏
0

  • 10
  • 20
  • 50
  • 100
您目前伪币余额:0
未名交友
[更多]
[更多]
g 家面经
[版面:待字闺中][首篇作者:henhaode] , 2015年08月17日18:59:13 ,2660次阅读,6次回复
来APP回复,赚取更多伪币 关注本站公众号:
[分页:1 ]
henhaode
进入未名形象秀
我的博客
[回复] [回信给作者] [本篇全文] [本讨论区] [修改] [删除] [转寄] [转贴] [收藏] [举报] [ 1 ]

发信人: henhaode (henhaode), 信区: JobHunting
标  题: g 家面经
发信站: BBS 未名空间站 (Mon Aug 17 18:59:13 2015, 美东)

producer / consumer 问题, 要求threadsafe, high throughput

class ProducerConsumer
    {
        ReaderWriterLock rwLock = new ReaderWriterLock();
        AutoResetEvent FullEvent = new AutoResetEvent ();
        AutoResetEvent EmptyEvent = new AutoResetEvent ();
        public void Producer()
        {
            rwLock.AcquireWriterLock();

            while(queue is full)
            {
                FullEvent.waitOne();
            }

            //add

            if(Queue.count == 1)
                EmptyEvent.set();

            rwLock.ReleaseLock();
          

        }

        public void Consumer()
        {
            rwLock.AcquireReaderLock();

            while(Queue is empty)
            {
                EmptyEvent.WaitOne();
            }

            dequueue();

            if (Count == max – 1);

               FullEvent.set();

            rwLock.ReleaseReaderLock();
        }

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

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

发信人: hplp (hplp), 信区: JobHunting
标  题: Re: g 家面经
发信站: BBS 未名空间站 (Mon Aug 17 21:02:14 2015, 美东)

LZ这是电面?感觉不好搞啊

LZ提供下背景吧


【 在 henhaode (henhaode) 的大作中提到: 】
: producer / consumer 问题, 要求threadsafe, high throughput
: class ProducerConsumer
:     {
:         ReaderWriterLock rwLock = new ReaderWriterLock();
:         AutoResetEvent FullEvent = new AutoResetEvent ();
:         AutoResetEvent EmptyEvent = new AutoResetEvent ();
:         public void Producer()
:         {
:             rwLock.AcquireWriterLock();
:             while(queue is full)
: ...................



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

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

发信人: Nerissa (Nerissa), 信区: JobHunting
标  题: Re: g 家面经
发信站: BBS 未名空间站 (Mon Aug 17 22:17:23 2015, 美东)

对啊,没怎么复习concurrency的题,感觉挺难的。

请问楼主,consumer为什么用reader lock,consumer里面有dequeue这个操作,更改了
queue的内容,这样岂不是可以好几个reader thread一起dequeue?就不thread safe了
吧。是不是应该直接在method上加synchronized?
--
※ 来源:·WWW 未名空间站 网址:mitbbs.com 移动:在应用商店搜索未名空间·[FROM: 54.]

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

发信人: hplp (hplp), 信区: JobHunting
标  题: Re: g 家面经
发信站: BBS 未名空间站 (Tue Aug 18 02:38:58 2015, 美东)

LZ, high through put是怎么做到的?面试官有详细说明吗?

前后提供的代码好像都有一点点小问题
详细的请看这里:https://en.wikipedia.org/wiki/Monitor_(synchronization)

下面的conditional variable, producer/consumer这块


【 在 henhaode (henhaode) 的大作中提到: 】
:  简化一下 
:  public class ProducerConsumer
:     {
:         private Semaphore fillCount;
:         private Semaphore emptyCount;
:         private ConcurrentQueue<int> queue;
:         public ProducerConsumer()
:         {
:             fillCount = new Semaphore(0, 100);
:             emptyCount = new Semaphore(100, 100);
: ...................



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

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

发信人: backstab (沧海月明), 信区: JobHunting
标  题: Re: g 家面经
发信站: BBS 未名空间站 (Tue Aug 18 10:15:29 2015, 美东)

sorry cannot type in chinese.
I would start with, in practice no one is going to write producer/consumer
queue himself instead of using an existing concurrent queue implementation.
E.g. in java, there are ArrayBlockingQueue, LinkedBlockingQueue, etc, which
can be used for producer/consumer problem, and they have different
performance depend on use case. We can dive down int more details, e.g.
ArrayBlockingQueue is using 1 lock, thus producer/consumer is sharing same
lock, while LinkedBlockingQueue is doing lock splitting, thus producer/
consumer is not blocking each other, but the add/remove operation is more
expensive than ArrayQueue which just update the index,etc.

In the case of more than 1 producer/consumer, there are other tech to
improve concurrency, e.g. lock stripping, or some open source product like
Disruptor queue, etc.


【 在 hplp (hplp) 的大作中提到: 】
: LZ, high through put是怎么做到的?面试官有详细说明吗?
: 前后提供的代码好像都有一点点小问题
: 详细的请看这里:https://en.wikipedia.org/wiki/Monitor_(synchronization)
: 下面的conditional variable, producer/consumer这块



--
如果有来生,要做一棵树;
站成永恒,没有悲欢的姿势。
一半在土里安详,一半在风里飞扬,
一半洒落阴凉,一半沐浴阳光。
非常沉默,非常骄傲,    
从不依靠,从不寻找

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

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

发信人: Junger (皮皮), 信区: JobHunting
标  题: Re: g 家面经
发信站: BBS 未名空间站 (Tue Aug 18 13:11:37 2015, 美东)

High throughput需要用到lock-free datastructure。Google一下LMAX Disruptor吧。

【 在 henhaode (henhaode) 的大作中提到: 】
: producer / consumer 问题, 要求threadsafe, high throughput
: class ProducerConsumer
:     {
:         ReaderWriterLock rwLock = new ReaderWriterLock();
:         AutoResetEvent FullEvent = new AutoResetEvent ();
:         AutoResetEvent EmptyEvent = new AutoResetEvent ();
:         public void Producer()
:         {
:             rwLock.AcquireWriterLock();
:             while(queue is full)
: ...................



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

[分页:1 ]
[快速返回] [ 进入待字闺中讨论区] [返回顶部]
回复文章
标题:
内 容:

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

友情链接


 

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

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