У меня есть следующая ситуация, когда я создаю очередь отправки GCD, и в ней я планирую NSStream
к текущему NSRunLoop
, как это требуется в его спецификации, чтобы он выдавал события делегата, а затем я создаю цикл выполнения для этого потока используя [[NSRunLoop currentRunLoop run]
.Как справиться с проблемами параллелизма, возникающими при планировании цикла запуска NSStream с использованием GCD?
Это создает три возможных сценария:
Создание последовательной очереди, в которой исходное сообщение записи посылается через поток и другие записи сообщений отправляются только когда есть делегат обратного вызова из
NSStream
объекта, как попытка написать новые сообщения без уважения к этому шаблону (это было бы желательно) не удастся, так как очередь заблокирована запуском цикла запуска.Создайте параллельную очередь, в которой сообщения могут быть записаны в поток свободно, так как блоки, отправленные в очередь, будут выполняться одновременно с блоком, который запускает цикл цикла. Однако, хотя желательно, чтобы сообщения для записи и цикл выполнения выполнялись одновременно, конечно, нежелательно иметь блоки в очереди, одновременно предпринимая попытку записи одновременно с потоком.
Создайте две очереди - один отвечает за поддержание цикла запуска и получение обратных вызовов с обратным потоком, а другой - для отправки асинхронных сообщений записи в поток. Это, казалось бы идеальным, однако, кажется, что документация
NSStream
конкретно говорится, что не следует пытаться читать/писать в поток вне нити его планируется в.
не Учитывая эти сценарии ни один из которых являются идеальными, как решить эти проблемы?