LINUX.ORG.RU
ФорумTalks

[noob] вопрос о потоках

 


0

0

Сколько потоков может держать приложение без особых потерь производительности, если скажем перманентно активных из них - сотня, и нужно чтобы в памяти лежало несколько тысяч? Вопрос - сколько их может там лежать, скажем сотня тысяч, миллион? Подсознательно чувствую, что вопрос тупой, надеюсь на доки и маны по теме.

★★★★★

Ответ на: комментарий от catap

Можно раскрыть тему, за что?

За ручной доступ к кишкам MYSQL. Нет?

Возьмем к примеру MYSQL_FIELD:

The MYSQL_FIELD structure contains the members listed here:

char * name

The name of the field, as a null-terminated string. If the field was given an alias with an AS clause, the value of name is the alias.

char * org_name

The name of the field, as a null-terminated string. Aliases are ignored.

char * table

The name of the table containing this field, if it isn't a calculated field. For calculated fields, the table value is an empty string. If the table was given an alias with an AS clause, the value of table is the alias.
...................

В силу того, что указанные поля структуры официально описаны в документации, разработчики на говно изойдут но сделают так, чтобы они были мне доступны. Ровно в том виде, как это описано в документации. Причем ни больше ни меньше. Если структура в действительности содержит дополнительные неописанные поля - они могут приплывать и уплывать аки летучий голландец. Желающий их использовать ищет лишь на свою жопу приключений. И завтра они гарантированно появятся. В самый неподходящий момент.

По поводу содержимого MYSQL не сказано вообще ничего. Твои выводы?

bibi
()
Ответ на: комментарий от zabivator

Никак. понятие страниц закончится в vm. Когда дохяд данные до проца, там прямая адресация.

catap ★★★★★
()
Ответ на: комментарий от catap

>На счет главного ответа на главный вопрос!
42!

power
()
Ответ на: комментарий от catap

Документированость API не влияет на ABI. Функция на бинарном уровне есть но не описана. Как измениться функция когда ее опишут?

ABI - это не только набор экспортируемых символов. Это ещё и аргументы ф-й. И если девелупер говорит, что 'этот указатель для вас прозрачный' или 'содержимое этой структуры для вас закрыто' но ты все равно туда лезешь - ССЗБ. Жди проблем.

bibi
()
Ответ на: комментарий от zabivator

>Ушлый тред сможет прочитать данные другого процесса!

Тред ничего не знает о кешах. В кеше копия страниц оперативной памяти.
Тред обращается к виртуальному адресу в странице, и если её нет в кеше,
аппаратура туда её достает. Короче говоря, все аппаратно.

ttnl ★★★★★
()
Ответ на: комментарий от bibi

Любое изменение структур приведет к смене ABI. Я все еще не вижу логики.

catap ★★★★★
()
Ответ на: комментарий от ttnl

> Тред ничего не знает о кешах. В кеше копия страниц оперативной памяти. Тред обращается к виртуальному адресу в странице, и если её нет в кеше, аппаратура туда её достает. Короче говоря, все аппаратно.

Да я всё понимаю. Но проц-то работает с реальными адресами! Что будет, если ушлый тред попросит адрес, который лежит за пределами его адресного пространства? Данные достнутся из кеша, минуя обращение на загрузку страницы из RAM

zabivator
()
Ответ на: комментарий от ttnl

> Тред ничего не знает о кешах. В кеше копия страниц оперативной памяти. Тред обращается к виртуальному адресу в странице, и если её нет в кеше, аппаратура туда её достает. Короче говоря, все аппаратно.

Тут я протупил жестоко. Адресуется-то виртуальная память процесса/потока. Значит, максимум что будет - это segfault.

zabivator
()
Ответ на: комментарий от catap

Ну сменит он сигнатуру. ABI измениться. Я не вижу, упорно, логики.

Пардон, господа, но я - спать. Иначе мне этого сегодня вообще не светит. Может, завтра. Приятно было пообщаться.

bibi
()
Ответ на: комментарий от zabivator

>Что будет, если ушлый тред попросит адрес, который лежит за пределами

его адресного пространства?


Процессор поищет в TLB(это такой буфер для быстрого преобразования
виртуальных адресов в физические), и там этого адреса не обнаружит.
Тогда он полезет в таблицу страниц, и там тоже его не найдет.
Возникнет аппаратное синхронное событие - исключение - выполнится
обработчик исключения, который пошлет треду SIGSEGV или SIGBUS.

ttnl ★★★★★
()
Ответ на: комментарий от ttnl

> Процессор поищет в TLB(это такой буфер для быстрого преобразования виртуальных адресов в физические), и там этого адреса не обнаружит. Тогда он полезет в таблицу страниц, и там тоже его не найдет. Возникнет аппаратное синхронное событие - исключение - выполнится обработчик исключения, который пошлет треду SIGSEGV или SIGBUS.

Да, я выше уже отписался что сорвал =)

zabivator
()
Ответ на: комментарий от catap

>Ты про switch_mm (ссылка не работет)?
Да

53 if (unlikely(prev->context.ldt != next->context.ldt))
54 load_LDT_nolock(&next->context);

Вроде нигде больше проверок нет.

ttnl ★★★★★
()
Ответ на: комментарий от bibi

Ты говорил что ABI сохраниться если он измеит количество аргументов фунций. Это рвет мне мозг.

Про лазенье в не документированные структуры я согласен. Но я постулировал про не описаные функции ;)

catap ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.