Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: Общие вопросы > Non-Blocking и Blocking I/O


Автор: underW 25.7.2012, 10:02
как понять в чем отличие Blocking от Non-Blocking? В чем принципиальное отличие и как оно выражается?

Автор: LSD 25.7.2012, 18:21
Blocking IO может заблокировать текущий поток, если данные не могут быть прочитаны прямо сейчас. Non blocking IO никогда не блокирует поток.

Разница в идеологии написания программ: в случае блокирующего IO обычно один поток читает данные, засыпая когда данные еще не поступили, у каждого сетевого соединения свой обслуживающий поток. В случае неблокирующего IO один поток по очереди читает данные из тех отрытых соединений где есть новые данные.

Автор: COVD 25.7.2012, 20:25
Сберкасса. Открыто несколько окон. Блокирующий вариант - за каждым окном сидит кассир. Неблокирующий вариант - один кассир бегает от окна к окну. smile 

Автор: underW 25.7.2012, 22:17
ну вот такой метод, который делает ничего - будет блокирующим:

Код

void BlockingMethod()
    {
        
        while(true)
        {
            //do nothing
        }
    }


А по какому алгоритму реализовать NonBlockingMethod()?

Автор: COVD 26.7.2012, 00:00
Код

void NonBlockingMethod()
    {
        
        //while(true)
        //{
            //do nothing
        //}
    }

Автор: LSD 26.7.2012, 14:44
Цитата(underW @  25.7.2012,  23:17 Найти цитируемый пост)
ну вот такой метод, который делает ничего - будет блокирующим:

Это неправильный пример.

Правильный пример такой:
Код

public int bloking() {
  // get result
  return result;
}

public Integer notBloking() {
  if (isReady) {
    return result;
  } else {
    return null;
  }
}

Автор: underW 27.7.2012, 16:47
Спасибо, ребята.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)