Redis
 sql >> база данни >  >> NoSQL >> Redis

Redis е еднонишков, тогава как прави едновременен I/O?

Ами зависи от това как дефинирате едновременността.

В софтуера от страна на сървъра, паралелността и паралелизмът често се разглеждат като различни концепции. В сървър, поддържането на едновременни I/O означава, че сървърът е в състояние да обслужва няколко клиента, като изпълнява няколко потока, съответстващи на тези клиенти само с една изчислителна единица. В този контекст паралелизмът би означавал, че сървърът е в състояние да изпълнява няколко неща едновременно (с множество изчислителни единици), което е различно.

Например барманът може да се грижи за няколко клиента, докато може да приготви само една напитка в даден момент. Така той може да осигури едновременност без паралелизъм.

Този въпрос беше обсъден тук:Каква е разликата между едновременност и паралелизъм?

Вижте също тази презентация от Роб Пайк.

Еднонишкова програма определено може да осигури едновременност на ниво I/O, като използва I/O (де)мултиплексиращ механизъм и цикъл на събития (което прави Redis).

Паралелизмът има цена:с множеството гнезда/множеството ядра, които можете да намерите на съвременния хардуер, синхронизирането между нишките е изключително скъпо. От друга страна, тесното място на ефективна машина за съхранение като Redis много често е мрежата, много преди процесора. Следователно изолираните цикли на събития (които не изискват синхронизация) се разглеждат като добър дизайн за изграждане на ефективни, мащабируеми сървъри.

Фактът, че операциите на Redis са атомарни, е просто следствие от еднонишковия цикъл на събития. Интересното е, че атомарността се предоставя без допълнителни разходи (не изисква синхронизация). Той може да бъде използван от потребителя за прилагане на оптимистично заключване и други модели, без да плаща за режийните разходи за синхронизиране.



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Алгоритъм за съпоставяне на потребители

  2. phpredis на Windows 7 64bit xampp

  3. Какво е Express.js?

  4. redis bgsave не успя, защото fork не може да разпредели памет

  5. Как да конфигурирам JedisConnectionFactory да използва SSL, така че да не получа грешката:JedisDataException:ERR некриптираната връзка е забранена?