Ку: Я так понимаю, что если писатель пишет в канал первый раз, то он не блокируется. Но если он пишет в канал, значение из которого еще не прочитано, то тогда писатель заблокируется
Я-то думал, что они полностю синхронные, т.е. реализуют рандеву если буферизация отключена.
>Я-то думал, что они полностю синхронные, т.е. реализуют рандеву если буферизация отключена.
Это, кстати, очень может быть. Я специально этот момент пометил своим комментарием, поскольку это мое мнение. Тут нужно проверять, а на моем буке сейчас Linux-а нет.
Я исходил из такого сценария: запускается сортировка в отдельной нити, после сортировки в канал пишется сигнал о том, что сортировка завершена. Тот, кто хочет узнать об этом читает из канала. Так вот, если небуферизированный канал -- это рандеву, то выделенная для сортировки нить может долго ждать своего читателя. А зачем, спрашивается?
Хотя, с другой стороны, если синхронный канал -- это не рандеву, то для рандеву нужно будет два канала делать? Как-то не правильно.
В общем, если у котого есть возможность развернуть Go под Linux-ом или MacOS, то можно проверить.
Вот над этим только что сидели с коллегой минут 5. Сильно!
ОтветитьУдалитьfor try := 0; try < 2; try++ {
file, err = os.Open(filename, os.O_RDONLY, 0);
if err == nil {
return
}
if e, ok := err.(*os.PathError); ok && e.Error == os.ENOSPC {
deleteTempFiles(); // Освободить место на диске.
continue
}
return
}
Ку: Я так понимаю, что если писатель пишет в канал первый раз, то он не блокируется. Но если он пишет в канал, значение из которого еще не прочитано, то тогда писатель заблокируется
ОтветитьУдалитьЯ-то думал, что они полностю синхронные, т.е. реализуют рандеву если буферизация отключена.
>Я-то думал, что они полностю синхронные, т.е. реализуют рандеву если буферизация отключена.
ОтветитьУдалитьЭто, кстати, очень может быть. Я специально этот момент пометил своим комментарием, поскольку это мое мнение. Тут нужно проверять, а на моем буке сейчас Linux-а нет.
Я исходил из такого сценария: запускается сортировка в отдельной нити, после сортировки в канал пишется сигнал о том, что сортировка завершена. Тот, кто хочет узнать об этом читает из канала. Так вот, если небуферизированный канал -- это рандеву, то выделенная для сортировки нить может долго ждать своего читателя. А зачем, спрашивается?
Хотя, с другой стороны, если синхронный канал -- это не рандеву, то для рандеву нужно будет два канала делать? Как-то не правильно.
В общем, если у котого есть возможность развернуть Go под Linux-ом или MacOS, то можно проверить.