Техники за оптимизиране при програмиране

от ILuxWiki

Направо към: навигация, търсене

Проблеми с използването на много процеси

  • Проблем с dynamic linker и използваната от него Global Offset Table: таблицата за изместването се опреснява само когато дадената фукнция се извика за първи път в програмата. Така, ако се извика дадената функция за първи път след fork(), и програмата се размножи на 1000 процеса(children), тогава ще загубите 1000 4k страници(pages). Това може да бъде поправерно като кажете на dinamyc loader от опреснява всички измествания(offsets) при стартиране на програмата като дефинирате $LD_BIND_NOW променливата в обкръжението.

Timeout handling with poll()

poll is a var iant on select (poll appeared 1986 in System V R3):

 struct pollfd pfd[2];
 pfd[0].fd=0; pfd[0].events=POLLIN;
 pfd[1].fd=1; pfd[1].events=POLLOUT|POLLERR;
 if (poll(pfd,2,1000)==0) /* 2 records, 1000 milliseconds timeout */
   handle_timeout();
 if (pfd[0].revents&POLLIN) can_read_on_fd_0();
 if (pfd[1].revents&POLLOUT) can_write_on_fd_1();
  • Pro: no limit on t he number of records and descr iptors.
  • Con: poll is not available on some museum exhibitions. Only one cur rent

"Unix" disqualifies itself for networking by not of fer ing poll: MacOS X.

оригинал:Scalable Network Programming.pdf