ПАМАГИТЕ!!!
сделал
$svn add directory
А когда оно вместе с объектниками добавило, плохо подумал и сделал
$svn remove --force directory
И теперь этого каталога нет ни в репозитории, ни на диске...
Можно как-то востановить каталог? там всего один важный файл.
файловая система riserFS
Надо написать на С/С++ сетевой мультиплексор, который будет принимать запросы от клиентов из локальной сети и транслировать их на удаленный сервер и обратно. TCP-cоединение с клиентом поддерживается постоянно. Связь с удаленым сервером возможна только по одному соединению. Все бы ничего, но клиентов ожидается несколько тысяч.
Есть ли какие-то секреты при написании таких програм? Есть ли системное ограничение на максимальное количество одновременных соединений у процесса и можно ли его преодолеть?
Если кто писал что-то подобное, поделитесь пожалуста опытом.
Сейчас этот мультиплексор реализован в виде одного процесса который делает внутри себя select и последовательно обрабатывает данные от каждого клиента, но при таком подходе уже при 100 клиентах начинаются проблемы с производительностью.
Столкнулся с проблемой.
вот код
struct work_t
{
std::deque<int> data;
boost::mutex * mutex;
};
std::vector<work_t> work_data;
void worker (const int & n)
{
std::ofstream ostr(...);
while(!stop)
{
int s = 0;
{
boost::mutex::scoped_lock lk(*(work_data[n].mutex));
if(!work_data[n].data.empty())
{
s = work_data[n].data.front();
work_data[n].data.pop_front();
}
}
if(s != 0)
{
do_some_work(s);
}
if(have_results)
{
write_results(ostr);
}
}
}
int main()
{
//...
// Заполнение и инициализация массива work_data
//..
boost::thread_group grp;
for(int i=0;i<nthread;++i)
{
grp.create_thread(boost::bind(&worker,i));
}
grp.join_all();
//...
}
Каждый поток работает со своей порцией данных.
mutex защищающий данные потока, на данный момент, всегда свободен. Т.е. поток никогда не должен в нем засыпать.
Если я запускаю 4 потока на машине с AMD Athlon64 3000, то в htop
видно что все потоки находятся в состоянии R и отбирают 100%
процессорного времени, которое делится между потоками. Вроде все
нормально.
Но если эти же 4 потока, на тех же самых данных запустить на 4-х
процессорной машине с DualCore Opteron 875, то загрузка на всех
процесорах не превышает 50% и одновременно работает только 1 или 2
потока остальные висят в состоянии D (насколько я понял это означает
что поток заблокирован).
Кто-нибудь может мне объяснить с чем связано такое поведение?
Хочется все-таки загрузить машину по полной.
Есть у меня несколько машин в локальной сетке на которых запускается ряд
обычных приложений. Сейчас управление этими приложениями происходит по алгоритму - зашел по ssh на машину 1, поправил конфиг приложения А, запустил приложение А, зашел на машину 2, поправил конфг приложения Б, запустил приложение Б.... зашел на машину 1, посмотрел лог работы приложения А... и так каждый день.
Надоело уже! :) Хочу сделать централизованный интерфейс управления всем этим хозяйством и желательно через Web а-ля webmin. Но не знаю с какой стороны к этому подойти. Всю сознательную жизнь писал на С++ и только немного знаю Perl и азы HTML.
Посоветуйте, какие инструменты, языки и библиотеки можно использовать для моей задачи. Хотя бы с какими ключевым словами можно в гугл лезть?
Все машины, в том числе и та, на которой будет установлено это Web-приложение, работают под Linux.
Собрал beryl-0.1.0 и emerald из svn. При запуске, после показа сплэша, экран становиться белым, видны только тени. Эфекты работают, можно покрутить куб, по Alt-Tab видно окно переключения окон.
Откатился на compiz и cgwd, все работает нормально.
Кто-нибудь сталкивался с подобным.
Debian/Etch, Xorg 7.0,
видеокарта Ati X550. дрова 8.28
Если импортировать документ MS Word содержащий математические формулы в ОпенОфис, то вместо символа суммы получю большую букву 'е', точка (умножение) заменяется на 'Ч'. Ну и еще кое-где по мелочам.
Кто-нибудь знает как с этим бороться?
OpenOffice.org 2.0
Кто-нибудь запускал Oblivion от 1С под Cedega?
Раскажите как сделали?
Моя конфигурация
AMD64 3000+
1Gb RAM
Video Radeon x550 128 Mb. (driver 8.26.18)
Cedega 5.2.1
Если просто запустить из по GUI Oblivion Launcher то в окне ланчера ни одна кнопка не реагирует на мышь.
Скачал последний oldblivion, распаковал в каталог установки, сделал ярлык на oldblivion.exe. oldblivion вобще не запускается. Нашел файлик
oldblivion.exe.log в нем запись "что-то instalation path.FAILED".
В гугле по этой строке нашел ссылку на какой-то форум, где описывалась такая-же проблема но под виндами - там грушили что в реестре был неправильно указан путь к каталогу oblivion. у себя проверил - вроде все нормально.
Что делать не знаю... поиграть хочется.
ПС: под виндой идет приемлемо.
Необходимо из скрипта читать и записывать в файл данные получаемые от сервера. Сервер перед отправкой данных требует подписки.
Т.е. протокол такой
to server> REQUEST DATA1
to server> REQUEST DATA2
from server> DATA DATA1
from server> DATA DATA2
...
from server> DATA DATA1
from server> DATA DATA2
...
Пробовал прикрутить netcat, но он получает EOF из STDIN обрывает соединение. т.е ни
echo "request_string" | netcat host port > out
ни
netcat host port < file_reqest > out
не работают.
Можно ли что-нибудь сделать используя стандартные утилиты ?
Самому писать клента на С (а других языков я толком не знаю) не хочется.
Услышал я тут что Intel C++ может генерить более оптимальный код, и
решил попробовать. Установил себе триальную версию 9.0. Заменил в makefile
g++ на icpc, добавил в опции компилятора -O2 и -static (тесты проводятся
на машине где нет icc и без -static он ругается на отсутствие
динамических библиотек), пересобрал, запустил и тихо офигел.
Вместо полутора минут на gcc-3.3.3, получилось 12!!! замеры проводились
обычным time.
Что я неправильно сделал? могло повлиять на быстродействие использование -static ?
Еще, при компиляции icpc выдал кучу remark в основном на тему:
remark #981: operands are evaluated in unspecified order
remark #383: value copied to temporary, reference to temporary used
Может ли это влиять на скорость?
Есть ли вобще какие-нибудь рекомендации по переводу проекта с gcc на Intel C++?
Ищу высокопроизводительную библиотеку на С++ для работы с матрицами и решения СЛАУ. Необходимо как можно быстрее решать СЛАУ с размерностью от 30 до 100.
Я раньше немного работал только с TNT+Jama. Сейчас вот еще рассматриваю MTL и uBlas.
вот такой вывод top
Mem: 1034000k total, 642856k used, 391144k free, 35708k buffers
Swap: 1052216k total, 33604k used, 1018612k free, 259492k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ SWAP DATA COMMAND
22373 vinick 25 0 2175m 289m 1324 R 99.9 28.7 144:22.86 1.8g 2.1g proga
может кто-нибудь объяснить - почему Mem(used)+swap(used) = 660mb, хотя
как я понимаю должно быть не менее 2175mb.
Куде девается 1.8g свопа? в /dev/null?
может быть ответ на этот вопрос поможет понять откуда вобще берется такой перерасход.
у меня стояла планка SDRAM DIMM pc-133 256 метров. Недавно нашел еще планку на 32 метра. Так вот если воткнуть одновременно обе планки, то система распознает только 256 метров (хотя биос вроде говорит что занято слота DIMM). Если по отдельности, то все нормально - или 32 или 256.
Как заставить XEmacs автоматически включать c++-mode при открытии *.h файлов, у меня запускается c-mode?
Слышал когда-то, что он может читать информацию об используемом mode из специально подготовленного заголовка в начале файла, но не могу найти описание.
Потребовалось в shell выделить из полного пути только имя файла без
расширения. После долгих и мучительных раздумий удалось родить вот
такое:
i="/home/user/work/data/abcd.dat"
fil=`echo $i | awk -F/ '{print $6}'`
name=`echo $fil | awk -F. {print $1}'`
в итоге namе="abcd", что мне и надо.
Есть ли более простые и универсальные способы? Мне не нравится то что
нужно знать уровень вложености файла относительно корня.
А сколько максимально можно выделить памяти через malloc, если установлено 4гига оперативной памяти и размер свопа можем считать неограниченым(настолько большим, что хватит всем процессам)? 3 гига? 4?
Насколько такое решение будет кросс-платформеным
template <typename T>
union TVal
{
T val;
char rep[sizeof(T)];
};
template <typename T>
ostream & operator <<(ostream &ostr, const TVal<T> & t)
{
return ostr.write(t.rep,sizeof(T));
}
template <typename T>
istream & operator >>(istream &istr,TVal<T> & t)
{
return istr.read(t.rep,sizeof(T));
}
Если запись будет происходить в Linux,а чтение в Windows.
Есть ли другие варианты?
Или лыжи не едут или ... других вариантов нет :)
читаю C++ Standard Library, The: A Tutorial and Reference Nicolai M. Josuttis
Там в разделе про string написано
[Цитата]
istream& getline (istream& strm, string& str)
istream& getline (istream& strm, string& str, char delim)
Read the characters of the next line from strm into the string str.
All characters (including leading whitespaces) are extracted until any of the following happens:
* strm. width() is greater than 0 and width() characters are sored
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* strm.good() is false (which might cause an appropriate exception)
* delim or strm. widen('\n') is extracted
* str.max_size() characters are stored
[/Цитата]
Ага.. пишу:
std::ifstream in("file.txt");
while(!in.eof())
{
string s;
in.width(2);
if(std::getline(in,s))
std::cout<<s<<std::endl;
else
break;
}
и вместо того чтобы читать в s по 2 символа, getline все равно читает пока не встретит конец строки или eof.
Что такое? в книге ошибка или у меня getline неправильный?
gcc version 3.4.2 (mingw-special).